只获得一次Lollipop及以上版本的SD卡窗口许可

时间:2016-08-29 05:37:13

标签: android android-5.0-lollipop delete-file android-sdcard

您好我正在从SD卡中删除一些项目。在棒棒糖第一次我要求许可和用户授权许可,但现在我不想每次都要求许可。它非常恼人,很多人都害怕这种行为。如何保存我的许可,即下次我不需要一次又一次地通过该意图

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

谢谢

3 个答案:

答案 0 :(得分:1)

我给你一些代码示例。请记住,您需要在Android 6.0上获得检查权限。 OnRequestPermission是一种方法,当你有权限时,将在grantResult中执行代码,如果不是,你可以请求权限或说明用户未授予权限的消息。此方法保存权限

的状态
@TargetApi(23)
public void checkStoragePermission() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        if (settingsDrawerFragment != null) {
            settingsDrawerFragment.onPermissionGranted();
        }
        return;
    }
    if (this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager
            .PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                REQUEST_CODE_EXTERNAL_STORAGE);
        return;
    }
    if (settingsDrawerFragment != null) {
        settingsDrawerFragment.onPermissionGranted();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[]
        grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_AUDIO_RECORD:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                startBrowseActivity();
            } else {
                Utils.showToast(this, getString(R.string.audio_permission_denied));
            }
            break;
        case REQUEST_CODE_EXTERNAL_STORAGE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (settingsDrawerFragment != null) {
                    settingsDrawerFragment.onPermissionGranted();
                }
            } else {
                if (settingsDrawerFragment != null) {
                    closeSettingsDrawer();
                }
                Utils.showToast(this, getString(R.string.storage_permission_denied));
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            break;
    }
}

答案 1 :(得分:1)

您可以使用以下代码来保留权限

 getContentResolver().takePersistableUriPermission(treeUri,
            Intent.FLAG_GRANT_READ_URI_PERMISSION |
            Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

此外,如果您持久保存权限,请将uri保存在sharedPreference中,以便以后可以删除文件而无需确认。

答案 2 :(得分:0)

您可以通过添加falgs来启动您的意图。

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
 startActivity(intent);