android - 在 Lollipop 及以上版本上仅获得一次 sdcard 窗口的权限

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

您好,我正在从 SD 卡中删除一些项目。在 Lollipop 中,我第一次请求许可并用户授予许可,但现在我不想每次都请求许可。这非常令人恼火,很多人都害怕这种行为。我如何保存我的许可,即下次我不需要一次又一次地传递该 Intent

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

谢谢

最佳答案

我给你一些代码作为例子。请记住,您需要在 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;
    }
}

关于android - 在 Lollipop 及以上版本上仅获得一次 sdcard 窗口的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39199123/

相关文章:

android-5.0-lollipop - ActionBar 中动画 ActionBarDrawerToggle 的颜色

android - 错误:Module version com. loopj.android :android-async-http:1. 4.3依赖于库但本身不是库

batch-file - 报告删除DEL批处理文件中的文件失败

python - OpenAI, Python, 删除文件

java - Java中的唯一ID代码

android - 为什么这个广播接收器在 Android Lollipop 中不起作用?

android - 如何检测连接的蓝牙外围设备(自拍杆)的点击事件?

python - 打开其中的文件后删除包含的目录是否安全?

android - 如何在 Android 中管理相机快门速度和光圈?

java - NotificationManagerCompat 中的 (android.content.Context) 无法应用于