首页 > 解决方案 > 运行时未调用权限

问题描述

我已经实施了许可android.permission.CALL_PHONE。问题是,在进行测试时,一旦取消,就不会询问许可。

也就是说,如果我在运行时请求它并且我说如果我想允许调用,它会完美运行,但如果我说我不想允许调用,我无法在下一次打开时再次询问它的应用程序。

应用程序是否可以通过任何方式再次请求许可?如果没有,有没有办法将用户发送到应用程序信息以从那里接受它?

谢谢你。

标签: javaandroidandroid-permissions

解决方案


简短回答 - 如果用户拒绝并再次勾选从不询问,您将无法再次询问权限。

但是您可以显示一些有意义的消息并要求用户手动启用您的应用程序的权限。更多您可以将用户重定向到 Android 设置下的应用权限页面。

您可以检查用户是否早先拒绝使用shouldShowRequestPermissionRationale.

您可以阅读有关权限的更多信息 https://developer.android.com/training/permissions/requesting

我使用以下代码库来实现权限检查

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_PERMISSION) {
        // Permission check if the user granted/denied them you may want to group the rationale in a single dialog        
        for (int i = 0, len = permissions.length; i < len; i++) {
            String permission = permissions[i];
            if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
            // denied the permission
                boolean showRationale = shouldShowRequestPermissionRationale( permission );
                if (! showRationale) {
                    // User ticked "never ask again"
                    // Show some meaningful message 
                } else if (Manifest.permission.WRITE_CONTACTS.equals(permission)) {
                    showRationale(permission, R.string.permission_denied_contacts);
                    // NOT ticked "never ask again"
                } else if ( /* possibly check more permissions...*/ ) {
                }
            }
        }
    }
}

推荐阅读