运行时未调用权限

时间:2018-08-22 14:30:49

标签: java android android-permissions

我已经实现了权限android.permission.CALL_PHONE。问题是,在进行测试时,取消权限后不会再询问该权限。

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

简短回答-如果用户被拒绝并再次勾选“不再询问”,则无法再次询问“权限”。

但是您可以显示一些有意义的消息,并要求用户手动为您的应用启用权限。您还可以在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...*/ ) {
                }
            }
        }
    }
}