经过测试的READ_PHONE_STATE的Android M权限(危险权限)
如果我尝试使用 获取电话号码时设备运行的是Android 6.0或更高版本:
java.lang.SecurityException:要求READ_PHONE_STATE:用户10184和当前进程都没有android.permission.READ_PHONE_STATE。
这出来了。
我宣布允许为:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
回答:
在Android 6.0中,您需要明确要求用户授予权限。仅在清单中声明它是不够的。
docs中的这篇文章是开始学习新模型的好地方,但我会做一个简短的总结。
每次执行需要“危险许可”的操作时,都需要检查当前是否已授予许可,因为用户可以随时将其撤消。
这可以通过该checkSelfPermission
方法来完成。
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// We do not have this permission. Let's ask the user
}
您可以使用requestPermissions
方法请求权限,例如
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_READ_STATE);
其中PERMISSION_READ_STATE
是您定义的常数整数,以便稍后检入回调方法。
然后onRequestPermissionsResult
,您将在活动中覆盖并查看是否已授予许可。如果是这样,则可以继续执行危险的操作。
@Overridepublic void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_READ_STATE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission granted!
// you may now do the action that requires this permission
} else {
// permission denied
}
return;
}
}
}
以上是 经过测试的READ_PHONE_STATE的Android M权限(危险权限) 的全部内容, 来源链接: utcz.com/qa/435642.html