Here are more generalized version of DrHowdyDoo's solution
fun isExternalStorageManager(
packageName: String,
context: Context,
packageManger: PackageManager
): Boolean {
return hasPermission(packageName, MANAGE_EXTERNAL_STORAGE, context, packageManger)
}
fun hasPermission(
packageName: String,
permission: String,
context: Context,
packageManger: PackageManager
): Boolean {
val granted: Boolean
val appOps = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
val info = packageManger.getApplicationInfo(packageName, 0)
val mode = appOps.unsafeCheckOpNoThrow(
AppOpsManager.permissionToOp(permission)!!,
info.uid,
packageName
)
granted = if (mode == AppOpsManager.MODE_DEFAULT) {
context.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED
} else {
(mode == AppOpsManager.MODE_ALLOWED)
}
return granted
}
Example:
isExternalStorageManager("dk.tacit.android.foldersync.lite", this, getPackageManager())
You can also add the queried package like this in AndroidManifest.xml:
<queries>
<package android:name="dk.tacit.android.foldersync.lite" />
</queries>