TiJ*_*iJo 6 permissions android android-external-storage android-11
我需要检查其他应用程序是否具有外部存储管理器的权限。和
Environment.isExternalStorageManager()
Run Code Online (Sandbox Code Playgroud)
我检查当前应用程序是否已被授予。我如何为另一个应用程序执行此操作?我已经尝试检查权限状态
getPackageManager().checkPermission(Manifest.permission.MANAGE_EXTERNAL_STORAGE, "dk.tacit.android.foldersync.lite")
Run Code Online (Sandbox Code Playgroud)
但它总是返回 -1,这意味着 PERMISSION_DENIED,即使授予了权限。
您可以尝试使用AppOpsManager类,如下所示:
try {
PackageManager packageManager = this.getPackageManager();
ApplicationInfo info = packageManager.getApplicationInfo("package name",0);
Log.d("TAG", "onCreate: "+hasPermission(this,info));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
现在的hasPermission功能:
@RequiresApi(api = Build.VERSION_CODES.R)
public static boolean hasPermission(Context context,ApplicationInfo info) {
boolean granted = false;
AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOps.unsafeCheckOpNoThrow(AppOpsManager.permissionToOp("android.permission.MANAGE_EXTERNAL_STORAGE"), info.uid, info.packageName);
if (mode == AppOpsManager.MODE_DEFAULT)
granted = (context.checkCallingOrSelfPermission(Manifest.permission.MANAGE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
else
granted = (mode == AppOpsManager.MODE_ALLOWED);
return granted;
}
Run Code Online (Sandbox Code Playgroud)
您还必须QUERY_ALL_PACKAGES在清单中声明许可:
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |