public final static int REQUEST_READ_PHONE_STATE = 1;
加上这个定义,忘记添加到代码片了,我的问题,这次补上了。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//“Manifest.permission.”后面接上要申请的权限,我这里是读取权限
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
//进入到这里代表没有权限.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE);
} else {
//有权限,这里面添加需要权限的方法
}
}
//添加权限,我这里是读取权限,可以不用动这段代码
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_READ_PHONE_STATE:
if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
//用户同意授权,这里面添加需要权限的方法
}//else 用户拒绝授权
break;
default:
break;
}
}
public void Read(View v) {
//检查权限,将读权限换成你要申请的权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//进入到这里代表没有权限.“Manifest.permission.”后面同上一样,换成你要申请的权限
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
//已经禁止提示了
Toast.makeText(ContrastActivity.this, "您已禁止该权限,需要重新开启。", Toast.LENGTH_SHORT).show();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PHONE_STATE);
}
} else {
//运行需要权限的方法或语句
}
}
上面的代码就是动态申请权限的格式了,一些注意点我都注释了,新手在学习中,如果有什么地方疏漏的请指点,你们的建议和指点是我前进的明灯
下面是多个的动态申请方法,然后OnCreat方法里调用permission就行了
//权限获取
private void permission() {
List<String> permissionLists = new ArrayList<>();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionLists.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionLists.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!permissionLists.isEmpty()) {//说明肯定有拒绝的权限
ActivityCompat.requestPermissions(this, permissionLists.toArray(new String[permissionLists.size()]), PERMISSION_REQUESTCODE);
} else {
Toast.makeText(this, "权限都授权了,可以搞事情了", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSION_REQUESTCODE:
if (grantResults.length > 0) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "某一个权限被拒绝了", Toast.LENGTH_SHORT).show();
return;
}
}
//其他逻辑(这里当权限都同意的话就执行打电话、获取本地信息等逻辑)
}
break;
default:
break;
}
}