对话框的Android M权限问题“不要再询问”

这是通过Scoped Directory Access授予权限的更简单的方法,但Dialog将显示一个名为“不再询问”的复选框。 如果用户选择不再询问并拒绝该请求,则来自您的应用的对于给定目录的所有未来请求将被自动拒绝,并且不会向用户呈现请求UI。 如果用户遗憾或误打了该复选框,应用程序如何补救? 应用程序无法获得权限对话框。

我们该如何处理?


我们应该使用shouldShowRequestPermissionRationale.Please通过这个:

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();
    }

有没有办法改变这个标志?

开发人员不能更改该标志。 否则,复选框没有任何意义,因为开发人员会通过更改标志来忽略它。

但是,您的问题指出了范围性目录访问中存在相当大的缺陷:用户修改该标志的能力有限。 在“设置”中似乎没有具体改变此状态的地方,用户可以手动授予拒绝的运行时权限的方式。

在运行7.1预览版的Nexus 5X上,“清除数据”将重置此标志,但具有更广泛的影响。 在运行7.1的Google Pixel上以及运行Android 7.0的Nexus 5X上,即使完全卸载应用程序,也不会重置此标志。

我已经提交了关于此的错误报告。 我怀疑这种情况在短期内会有很大的改善 - 最好的情况是,他们可以修复这种情况,以便“清晰数据”能够可靠地工作。


我认为你需要做的是使用方法shouldShowRequestPermissionRationale(String),如果用户拒绝了权限并选中“不要再询问”,它将返回false。

你应该做的是显示一条警告,解释用户为什么需要权限或执行回退,如禁用某些功能。

希望能有所帮助。

链接地址: http://www.djcxy.com/p/93993.html

上一篇: Android M permission issue with Dialog "Don't ask again"

下一篇: Missing line when reading using input stream reader