San*_*bhu 9 java permissions mobile android
如果设备在使用getLine1Number()尝试获取电话号码时运行Android 6.0或更高版本:
java.lang.SecurityException:需要READ_PHONE_STATE:用户10184和当前进程都没有android.permission.READ_PHONE_STATE. 这是出来的.
我宣布许可为:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Run Code Online (Sandbox Code Playgroud)
And*_*oke 21
在Android 6.0中,您需要明确要求用户授予权限.仅仅在清单中声明它是不够的.
文档中的这篇文章是开始学习新模型的好地方,但我将简要总结一下.
每次执行需要"危险权限"的操作时,都需要检查当前是否已授予权限,因为用户可以随时撤消该权限.
这可以通过该checkSelfPermission方法完成.
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
// We do not have this permission. Let's ask the user
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该requestPermissions方法请求权限
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_READ_STATE);
Run Code Online (Sandbox Code Playgroud)
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23271 次 |
| 最近记录: |