目录
申请一个权限:例如:打电话
0、在清单配置文件中加入对应权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
1、声明code值
private static final int REQUEST_CALL_PHONE = 1111;
2、点击事件:(butterkinfe)
case R.id.btn1://1、Call(打电话)
if (ContextCompat.checkSelfPermission(PermissionActivity.this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//如果不同意,就去请求权限 参数1:上下文,2:权限,3:请求码
ActivityCompat.requestPermissions(
PermissionActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
REQUEST_CALL_PHONE);
} else {
//同意就拨打
}
break;
3、返回码操作
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//判断请求码
switch (requestCode) {
case REQUEST_CALL_PHONE://1、Call(打电话)
//如果同意,就拨打
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
HnToast.showToastShort("已经获取到电话权限");
} else {
HnToast.showToastShort("未获取到电话权限");
}
break;
}
}
申请多个权限:例如 相机权限的写入文件权限
0、在清单配置文件中加入对应权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
1、声明code值
//申请多个权限 相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
private static final int REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE = 6666;
2、点击事件:(butterkinfe)
case R.id.btn6://6、相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
initPermission();
break;
//申请两个权限,相机和文件读写
//1、首先声明一个数组permissions,将需要的权限都放在里面
String[] permissions = new String[]{Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
//2、创建一个mPermissionList,逐个判断哪些权限未授予,未授予的权限存储到mPerrrmissionList中
List<String> mPermissionList = new ArrayList<>();
//权限判断和申请
private void initPermission() {
mPermissionList.clear();//清空没有通过的权限
//逐个判断你要的权限是否已经通过
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);//添加还未授予的权限
}
}
//申请权限
if (mPermissionList.size() > 0) {//有权限没有通过,需要申请
ActivityCompat.requestPermissions(this, permissions, REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE);
}else{
//说明权限都已经通过,可以做你想做的事情去
}
}
3、返回码操作
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasPermissionDismiss = false;//有权限没有通过
//判断请求码
switch (requestCode) {
case REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE://6、相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
hasPermissionDismiss = true;
}
}
//如果有权限没有被允许
if (hasPermissionDismiss) {
//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
}else{
//全部权限通过,可以进行下一步操作。。。
HnToast.showToastShort("已经获取到相机和写入文件权限");
}
break;
}
}