如果设备在使用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" />
解决方法
在Android 6.0中,您需要明确要求用户授予权限.仅仅在清单中声明它是不够的.
这篇文档中的article是开始学习新模型的好地方,但我会给出一个简短的总结.
每次执行需要“危险权限”的操作时,都需要检查当前是否已授予权限,因为用户可以随时撤消该权限.
这可以使用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; } } }