经过测试的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,您将在活动中覆盖并查看是否已授予许可。如果是这样,则可以继续执行危险的操作。

@Override

public 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

回到顶部