古人已用三冬足,年少今开万卷余。这篇文章主要讲述测试READ_PHONE_STATE的Android M权限(危险权限)相关的知识,希望能为你提供帮助。
如果设备在使用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是开始学习新模型的好地方,但我将简要总结一下。
每次执行需要“危险权限”的操作时,都需要检查当前是否已授予权限,因为用户可以随时撤消该权限。
【测试READ_PHONE_STATE的Android M权限(危险权限)】这可以使用
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;
}}
}
另一答案
public class MainActivity extends AppCompatActivity {TextView textView;
String device_unique_id,IMEI;
private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView)findViewById(R.id.textView);
}
public void GetImei(View view)
{loadIMEI();
}public void loadIMEI() {
// Check if the READ_PHONE_STATE permission is already available.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_PHONE_STATE)) {
//get_imei_data();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);
}
} else {TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
IMEI = mngr.getDeviceId();
device_unique_id = Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);
textView.setText(device_unique_id+"----"+mngr.getDeviceId());
// READ_PHONE_STATE permission is already been granted.
Toast.makeText(this,"Alredy granted",Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {if (requestCode == MY_PERMISSIONS_REQUEST_READ_PHONE_STATE) {if (grantResults.length == 1 &
&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {//Toast.makeText(this,"Alredy DONE",Toast.LENGTH_SHORT).show();
TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
IMEI = mngr.getDeviceId();
device_unique_id = Settings.Secure.getString(this.getContentResolver(),Settings.Secure.ANDROID_ID);
textView.setText(device_unique_id+"----"+mngr.getDeviceId());
} else {
Toast.makeText(this,"ehgehfg",Toast.LENGTH_SHORT).show();
}
}
}
推荐阅读
- Android ACCESS_LOCATION_EXTRA_COMMANDS权限使用
- Android中的文件权限
- 从manifest android中删除额外的不需要的权限
- 很好地获取Android用户的电子邮件地址
- 'Android.Runtime.UncaughtExceptionHandler'的类型初始值设定项引发了异常
- 构建xamarin android项目不成功,错误XA4212
- Android Check Internet Connection Android 8.0
- 在Xamarin Forms Project中的OnAppearing方法中调用InitializeComponent
- 如何限制用户输入EditText(Xamarin.Android)中小数点分隔符后的最大2位或3位数()