有谁知道此权限的来源以及如何在 Android 中以编程方式授予此权限?
Does Anyone knows Where this permission come from and how to grant this programmatically in Android?
我想创建一个文件资源管理器,经过大量搜索,我发现在 API 25 和higher.Then 我安装了一些文件管理器来测试它们是如何工作的。除了小米文件管理器,他们都使用 SAF。小米只授予权限。我截取了一些屏幕截图。enter image description here
enter image description here
编辑 1:我获得了所有运行时权限。
感谢阅读:)
Android 基本上定义了三种类型的权限:
普通权限
签名权限
危险权限
必须在清单文件中定义正常和危险权限。但是在运行时只检查危险权限,不检查正常权限。
普通权限
某些权限会自动授予应用程序。只需要在 AndroidManifest.xml 中声明这些权限,它就可以正常工作。这些权限称为普通权限。一个普通权限的例子是 INTERNET。
普通权限列表:https://developer.android.com/guide/topics/permissions/overview
签名权限
仅当请求应用程序使用与声明该权限的应用程序相同的证书签名时,系统才授予的权限。如果证书匹配,系统自动授予权限,无需通知用户或要求用户明确批准。
危险权限
一些权限可能会影响用户的隐私信息,或者可能会影响他的数据或其他应用程序的操作,这些权限称为危险权限。例如,读取用户联系人的能力是一项危险的权限。其他一些示例是 CONTACTS、CAMERA、CALENDAR、LOCATION、PHONE、STORAGE、SENSORS、MICROPHONE 等
用户必须在运行时向应用授予危险权限。
这是在运行时请求危险权限的示例:-
首先,给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
我在 Stack Overflow 中搜索了太多之后找到了它,所以有一个标志调用该对话框并获取存储的 uri,但这种方式仅适用于 android 7 到 10。
这是我的问题的答案:
我想创建一个文件资源管理器,经过大量搜索,我发现在 API 25 和higher.Then 我安装了一些文件管理器来测试它们是如何工作的。除了小米文件管理器,他们都使用 SAF。小米只授予权限。我截取了一些屏幕截图。enter image description here enter image description here
编辑 1:我获得了所有运行时权限。
感谢阅读:)
Android 基本上定义了三种类型的权限: 普通权限 签名权限 危险权限
必须在清单文件中定义正常和危险权限。但是在运行时只检查危险权限,不检查正常权限。
普通权限 某些权限会自动授予应用程序。只需要在 AndroidManifest.xml 中声明这些权限,它就可以正常工作。这些权限称为普通权限。一个普通权限的例子是 INTERNET。
普通权限列表:https://developer.android.com/guide/topics/permissions/overview
签名权限 仅当请求应用程序使用与声明该权限的应用程序相同的证书签名时,系统才授予的权限。如果证书匹配,系统自动授予权限,无需通知用户或要求用户明确批准。
危险权限 一些权限可能会影响用户的隐私信息,或者可能会影响他的数据或其他应用程序的操作,这些权限称为危险权限。例如,读取用户联系人的能力是一项危险的权限。其他一些示例是 CONTACTS、CAMERA、CALENDAR、LOCATION、PHONE、STORAGE、SENSORS、MICROPHONE 等
用户必须在运行时向应用授予危险权限。
这是在运行时请求危险权限的示例:-
首先,给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
我在 Stack Overflow 中搜索了太多之后找到了它,所以有一个标志调用该对话框并获取存储的 uri,但这种方式仅适用于 android 7 到 10。
这是我的问题的答案: