当屏幕上出现通知时,未授予Android Marshmallow权限

时间:2016-03-18 11:03:00

标签: android permissions android-permissions android-6.0-marshmallow

我在Marshmallow权限使用和Notification方面遇到了麻烦。

每次收到短信通知时(或类似

enter image description here

如果请求权限对话框同时出现在屏幕上(当出现通知时),我有一个不当行为:我点击Allow按钮,权限对话框被解雇,所有看起来都很好第一眼看
,当我尝试使用相同的权限时,我认为我已获得授权,但不是。系统告诉我,未授予许可。再次出现“权限请求”对话框。当我再次点击Allow时,如果没有通知,重叠系统会成功获得我的许可。

我如何能够解决这种情况?

我如何检查权限?

我从MarshmallowSupportActivity扩展了我的所有活动:

public abstract class MarshmallowSupportActivity extends ActionBarActivity {


    public void requestPermission(String permission, int requestCode) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{permission}, requestCode);
        } else {
            onPermissionGranted(permission, requestCode);
        }
    }

    public void requestPermission(int requestCode, String... permissions) {
        int notGrantedPermissionsCount = 0;
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                notGrantedPermissionsCount++;
            } else {
                onPermissionGranted(permission, requestCode);
            }
        }

        String[] requestedPermissions = new String[notGrantedPermissionsCount];
        int counter = 0;

        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                requestedPermissions[counter] = permission;
                counter++;
            }
        }

        if (notGrantedPermissionsCount != 0) {
            ActivityCompat.requestPermissions(this, requestedPermissions, requestCode);
        }
    }

    public void requestPermission(String permission) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{permission}, 255);
        } else {
            onPermissionGranted(permission, 255);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
        for (int i = 0, j = 0; i < permissions.length && j < grantResults.length; i++, j++) {
            if (grantResults[j] == PackageManager.PERMISSION_GRANTED) {
                onPermissionGranted(permissions[i], requestCode);
            } else {
                onPermissionDenied(permissions[i], requestCode);
            }
        }
    }

    public void onPermissionGranted(String permission, int requestCode) {
        Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show();
    }

    public void onPermissionDenied(String permission, int requestCode) {
        Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
    }
}

并使用:

requestPermission(android.Manifest.permission.CAMERA);

@Overriding onPermissionGrantedonPermissionDenied请求的活动。

0 个答案:

没有答案