我在Marshmallow权限使用和Notification方面遇到了麻烦。
每次收到短信通知时(或类似)
如果请求权限对话框同时出现在屏幕上(当出现通知时),我有一个不当行为:我点击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 onPermissionGranted
和onPermissionDenied
请求的活动。