有谁知道此权限来自何处以及如何在 Android 中以编程方式授予此权限?



我想创建一个文件浏览器,经过大量搜索,我发现如果没有 API 25 及更高版本的 SAF(存储访问框架(,我无法修改、删除或创建 SD 卡上的文件。然后我安装了一些文件管理器来测试它们如何工作。除小米文件管理器外,它们都使用SAF。小米只授予权限。我捕获了一些屏幕截图。在此处输入图像描述 在此处输入图像描述

编辑 1 : 我获得了所有运行时权限。

感谢您阅读:)

Android基本上定义了三种类型的权限: 普通权限 签名权限 危险权限

必须在清单文件中定义"正常"和"危险"权限。但运行时只检查危险权限,不检查正常权限。

普通权限 某些权限会自动授予应用程序。只需要我们需要在 AndroidManifest 中声明这些权限.xml它就可以正常工作。这些权限称为普通权限。正常权限的一个例子是互联网。

普通权限列表:https://developer.android.com/guide/topics/permissions/overview

签名权限 仅当使用与声明权限的应用程序相同的证书对请求应用程序进行签名时,系统才授予该权限。如果证书匹配,系统将自动授予权限,而无需通知用户或请求用户的明确批准。

危险权限 某些权限可能会影响用户的私人信息,或者可能会影响其数据或其他应用程序的操作,称为危险权限。例如,读取用户联系人的能力是一种危险的权限。其他一些例子是联系人,相机,日历,位置,电话,存储,传感器,麦克风等。

用户必须在运行时向应用授予危险权限。

以下是在运行时请求危险权限的示例:-

首先,向 AndroidManifest.xml 文件添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后在运行时请求用户的许可,如下所示:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
}else {
dispatchTakePictureIntent();
}
}

然后根据需要重写onRequestPermissionsResult方法。

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
do your stuff...
}else {
Toast.makeText(this,"Permission Denied",Toast.LENGTH_SHORT).show();
}
}
}

有关更多信息,请查看这篇文章:https://medium.com/programming-lite/runtime-permissions-in-android-7496a5f3de55

我在堆栈溢出中搜索太多后找到了它,所以有一个标志可以调用该对话框并获取存储的uri,但这种方式仅适用于android 7到10。 这是我问题的答案: 问答

最新更新