Android 6.0版本(Api 23)推出了很多新的特性, 在开发中突然发现项目运行不起来了报READ_PHONE_STATE错误,获取不到这个权限,可是已经加入了啊
通过网上一系列的查看发现API>=23之后需要动态获取权限
首先我们先在onResume中,也就是页面显示前检查有没有权限,有权限的话进行项目的业务逻辑,没有的则先申请权限
int REQUEST_READ_PHONE_STATE = 0;
@Override
protected void onResume() {
super.onResume();
//如果有权限直接执行
if (ContextCompat.checkSelfPermission(getApplicationContext(),
android.Manifest.permission.READ_PHONE_STATE)
== PackageManager.PERMISSION_GRANTED) {
//业务处理
}//如果没有权限那么申请权限 else { ActivityCompat.requestPermissions(LoginActivity.this, new String[]{android.Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); }}
申请权限的结果通过回调的形式返回
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == this.REQUEST_READ_PHONE_STATE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//业务处理
} else {
Toast.makeText(this, "拒绝了权限", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
当然在判断有无权限之前也可以先判断一下API版本是否大于等于23,这些就是全部了。
Quit!!!!