我尝试检查我设置的清单中的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />然后在片段中我尝试检查
int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.READ_CONTACTS);但我只得到0,而不管操作系统中应用程序属性的任何权限状态。我检查了Android 4.4.4 MIUI 6.5.1可能是MIUI的原因
如果我尝试检查Manifest中没有的权限,我会得到-1,但我想知道权限的切换状态。
谢谢
发布于 2017-07-19 19:09:46
将此函数添加到代码中,并仅在MIUI中为READ_COntacts调用checkUsagePermission()
private boolean checkUsagePermission() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
mode = appOps.checkOpNoThrow("android:read_contacts", android.os.Process.myUid(), getPackageName());
boolean granted = mode == AppOpsManager.MODE_ALLOWED;
if (!granted) {
//write your code here for accept that permission
return false;
}
}
return true;
}发布于 2016-02-02 16:17:41
0表示PackageManager.PERMISSION_GRANTED
在安卓6以下的安卓版本中,你会得到零,因为在安装应用程序之前已经提供了权限。如果你在安卓版本6或更高版本的手机上安装这个应用程序,那么它将返回-1,这意味着PackageManager.PERMISSION_DENIED在安装应用程序之前不会询问权限,而是在运行时询问权限。
因此,请编写如下代码:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
== PackageManager.PERMISSION_DENIED)
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CONTACTS},
PERMISSION_REQUEST_CODE);这样,只有当你没有权限时,你的应用程序才会请求许可,而且这只会在Android 6或更高版本上发生。在Android6下,你已经有权限了。
编辑:似乎早在谷歌在Android6中引入运行时权限之前,MIUI就提供了运行时权限。所以你面临的问题是特定于MIUI的。如果你使用Android 6以下的MIUI以外的任何其他设备,那么你将不会获得拒绝选择性权限的选项。您可以提供所有权限,也可以取消安装。所以你的应用在所有其他设备上都能很好地工作。
发布于 2016-04-01 13:29:32
我刚刚测试了MIUI7 6.3.31 Beta版的MI4W。
当我只请求Manifest.permission.READ_CONTACTS时,我面临着与您相同的checkSelfPermission返回真实错误。
即使我拒绝了拒绝请求,它也会将“Manifest.permission.WRITE_CONTACTS”设置为Manifest.permission.READ_CONTACTS。检查两个权限都将返回true。
虽然我已经拒绝了,但checkSelfPermission(Manifest.permission.READ_CONTACTS)返回true,并且偶尔MIUI会弹出一条消息,通知用户访问联系人被拒绝。
以下是我的实际权限: checkSelfPermission(Manifest.permission.READ_CONTACTS)
PermissionUtil:
public static boolean hasSelfPermission(Context context, String permission) {
// Below Android M all permissions are granted at install time and are already available.
if (!isMNC()) {
return true;
}
return context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
}
public static boolean isMNC() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}测试代码:
Log.d(TAG, "READ_CONTACTS: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.READ_CONTACTS));
Log.d(TAG, "WRITE_CONTACTS: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.WRITE_CONTACTS));
Log.d(TAG, "ACCESS_FINE_LOCATION: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.ACCESS_FINE_LOCATION));
Log.d(TAG, "ACCESS_COARSE_LOCATION: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION));
Log.d(TAG, "CAMERA: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.CAMERA));
Log.d(TAG, "RECORD_AUDIO: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.RECORD_AUDIO));
Log.d(TAG, "READ_EXTERNAL_STORAGE: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE));
Log.d(TAG, "WRITE_EXTERNAL_STORAGE: " + PermissionUtil.hasSelfPermission(TestActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE));应用程序设置中的所有权限都被拒绝。
结果:
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: READ_CONTACTS: true
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: WRITE_CONTACTS: true
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: ACCESS_FINE_LOCATION: false
04-01 13:16:54.968 25481-25481/com.test.test D/TestActivity: ACCESS_COARSE_LOCATION: false
04-01 13:16:54.968 25481-25481/com.test.test D/TestActivity: CAMERA: false
04-01 13:16:54.969 25481-25481/com.test.test D/TestActivity: RECORD_AUDIO: false
04-01 13:16:54.969 25481-25481/com.test.test D/TestActivity: READ_EXTERNAL_STORAGE: false
04-01 13:16:54.970 25481-25481/com.test.test D/TestActivity: WRITE_EXTERNAL_STORAGE: false我已经在Nexus 5上进行了测试,并拒绝了所有权限。
结果:
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: READ_CONTACTS: false
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: WRITE_CONTACTS: false
04-01 13:16:54.967 25481-25481/com.test.test D/TestActivity: ACCESS_FINE_LOCATION: false
04-01 13:16:54.968 25481-25481/com.test.test D/TestActivity: ACCESS_COARSE_LOCATION: false
04-01 13:16:54.968 25481-25481/com.test.test D/TestActivity: CAMERA: false
04-01 13:16:54.969 25481-25481/com.test.test D/TestActivity: RECORD_AUDIO: false
04-01 13:16:54.969 25481-25481/com.test.test D/TestActivity: READ_EXTERNAL_STORAGE: false
04-01 13:16:54.970 25481-25481/com.test.test D/TestActivity: WRITE_EXTERNAL_STORAGE: false结论这是MIUI 7 6.3.31测试版的一个错误。
https://stackoverflow.com/questions/35148085
复制相似问题