android – 在方向更改后重复权限请求

因为 Android SDK 23使用户有可能拒绝应用访问某些功能,所以我想更新我的一个应用程序来请求权限,如下所述: https://developer.android.com/preview/features/runtime-permissions.html.

在其中一个活动中,我嵌入了一个SupportMapFragment.要使其工作,您需要具有WRITE_EXTERNAL_STORAGE权限,因此当我启动导致创建权限请求对话框的活动时,我要求它.

现在的问题是当对话框仍然打开时,我旋转设备,活动将重新启动,并打开一个新的权限请求对话框,而旧的仍然在那里.结果是两个对话框之间的对比,只有一个是有用的.

有没有办法摆脱首先开始的对话框?

解决方法

正如CommonsWare在他的 comment中所说的,最好的解决方案是将一个布尔值放在savedInstanceState-Bundle中,以了解对话框是否仍然打开.

例:

// true if dialog already open
private boolean alreadyAskedForStoragePermission = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState != null) {
        alreadyAskedForStoragePermission = savedInstanceState.getBoolean(STORAGE_PERMISSION_DIALOG_OPEN_KEY,false);
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putBoolean(KEY,alreadyAskedForStoragePermission);
}

private void checkStoragePermission(){
    if(alreadyAskedForStoragePermission){
        // don't check again because the dialog is still open
        return;
    }

    if(ActivityCompat.checkSelfPermission(this,STORAGE_PERMISSIONS[0]) != PackageManager.PERMISSION_GRANTED){
        // the dialog will be opened so we have to keep that in memory
        alreadyAskedForStoragePermission = true;
        ActivityCompat.requestPermissions(this,STORAGE_PERMISSIONS,STORAGE_PERMISSION_REQUEST_CODE);
    } else {
        onStoragePermissionGranted();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
    switch (requestCode){
        case STORAGE_PERMISSION_REQUEST_CODE:
            // the request returned a result so the dialog is closed
            alreadyAskedForStoragePermission = false;

            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                onStoragePermissionGranted();
            }

            break;
    }
}

相关文章

###实现效果*本实例主要实现用ViewPage和Fragment实现选项卡...
一、安装 JDK 下载JDK最新版本,下载地址如下: http://www....
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...