如何授予Manifest.permission.MANAGE_DOCUMENTS权限在Android 6.0上

5

我想授权 Manifest.permission.MANAGE_DOCUMENTS 权限,但是当我运行应用程序时,权限对话框应该出现但没有出现。这是我的代码:

int hasCameraPermission = ContextCompat.checkSelfPermission(MemoryDetail.this, Manifest.permission.MANAGE_DOCUMENTS);
if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
    if (!ActivityCompat.shouldShowRequestPermissionRationale(MemoryDetail.this, Manifest.permission.MANAGE_DOCUMENTS)) {
        showDialogMessage("Need use permission: MANAGE_DOCUMENTS", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    requestPermissions(new String[] {Manifest.permission.MANAGE_DOCUMENTS}, Database.PICK_PICTURE);
                }
            }
        });

    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]{Manifest.permission.MANAGE_DOCUMENTS}, Database.PICK_PICTURE);
    }
    return;
}

1
你是否检查过自己是否具备执行需要该权限的任务的权限?如果你已经拥有该权限,则不会出现对话框。 - curob
我已在清单文件中声明了权限。如果我使用另一个权限,例如:相机、联系人等,它可以很好地工作。如果我不使用此权限,则会出现错误:java.lang.SecurityException: Permission Denial: opening provider com.android.externalstorage.ExternalStorageProvider from ProcessRecord{87433d2 4941:com.devil.tetmemory/u0a86} (pid=4941, uid=10086) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS. - mytruong
1个回答

11

MANAGE_DOCUMENTS 是一个 signature 级别的权限。普通的 Android 应用程序无法持有此权限。只有由签署固件的相同签名密钥签署的应用程序才能持有该权限。


你能给我更详细的信息并告诉我如何解决这个错误吗?谢谢。 - mytruong
@mytruong:通过从您的清单和Java代码中删除“MANAGE_DOCUMENTS”权限来“解决此错误”。您不能拥有该权限。 - CommonsWare
1
我使用Facebook API从我的应用程序分享文章。当我运行应用程序时,它会出现错误,因此我在清单和Java代码中添加了此权限。如果我在Android 6.0以下的版本(例如:5.0、4.4等)上运行,它可以很好地工作。我已经尝试过你的建议,但仍然无法正常工作@CommensWare。 - mytruong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接