对话框的Android M权限问题"不要再问了"

Ran*_*mar 13 android android-permissions

这是通过Scoped Directory Access授予权限的更简单方法,但Dialog将显示一个名为"Do not ask again"的复选框.如果用户选择不再询问并拒绝该请求,则将自动拒绝您应用中对给定目录的所有未来请求,并且不会向用户显示请求UI.如果用户后悔或错误地点击了该复选框,应用程序如何解决?应用无法获得权限对话框.

我们怎么办呢?

Com*_*are 7

有什么方法可以改变这面旗帜?

开发人员无法更改该标志.否则,拥有复选框是没有意义的,因为开发人员会通过更改标志来忽略它.

但是,您的问题指出了作用域目录访问中相当严重的缺陷:用户更改该标志的能力有限."设置"中似乎没有专门更改此状态的位置,即用户可以手动授予拒绝的运行时权限的方式.

在运行7.1预览版的Nexus 5X上,"清除数据"将重置此标志,但效果更广.在运行7.1的Google Pixel和运行Android 7.0的Nexus 5X上,没有任何内容可以重置此标志,即使是完全卸载该应用.

我已经提交了一份关于此的错误报告.我怀疑在短期内情况会有很大改善 - 充其量,他们可能会解决这个问题,因此"清晰数据"可靠地运作.

  • @RuchirBaronia:不,因为我能够在O Developer Previews上重新创建问题.我提交了[一个新的问题](https://issuetracker.google.com/issues/36522600),这是刚刚被忽略的. (3认同)

Lam*_*ard 1

我们应该使用shouldShowRequestPermissionRationale。请完成以下操作:

private void insertDummyContactWrapper() {
        int hasWriteContactsPermission = checkSelfPermission(Manifest.permission.WRITE_CONTACTS);
        if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                if (!shouldShowRequestPermissionRationale(Manifest.permission.WRITE_CONTACTS)) {
                    showMessageOKCancel("You need to allow access to Contacts",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    requestPermissions(new String[] {Manifest.permission.WRITE_CONTACTS},
                                            REQUEST_CODE_ASK_PERMISSIONS);
                                }
                            });
                    return;
                }
            requestPermissions(new String[] {Manifest.permission.WRITE_CONTACTS},
                    REQUEST_CODE_ASK_PERMISSIONS);
            return;
        }
        insertDummyContact();
    }
Run Code Online (Sandbox Code Playgroud)