从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。这种方式可以简化应用安装过程,它还让用户可以对应用的权限进行控制。例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户还可以随时进入设置界面对应用的权限进行修改。
系统权限分为两类:正常权限和危险权限:如需了解详细信息,请参阅正常权限和危险权限。
1、在AndroidManifest文件中添加需要权限
2、检查是否拥有该权限
ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
3、申请该权限
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
4、处理权限申请结果
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//授予了权限
} else {
//拒绝了权限
} return; } }}
1、添加依赖
dependencies {
implementation 'pub.devrel:easypermissions:1.2.0'
}
3、复写onRequestPermissionsResult方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 将返回结果转给EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
4、检查权限
String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(this, perms)) {
// 已获取权限
// ...
} else {
// 没有权限,现在去获取
// ...
}
5、申请权限
EasyPermissions.requestPermissions(this, "申请内存权限",
RC_READ_EXTERNAL_STORAGE, perms);
6、实现EasyPermissions.PermissionCallbacks接口,处理申请结果
@Override
public void onPermissionsGranted(int requestCode, @NonNull List perms) {
// 一些权限被授予
Toast.makeText(this, "允许", Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List perms) {
// 一些权限被禁止
Toast.makeText(this, "禁止", Toast.LENGTH_SHORT).show();
}
}
7、如果用户点击了拒绝,并勾选了不再询问
@Override
public void onPermissionsDenied(int requestCode, List perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
//弹出个对话框 可以自定义
}
OK!到这里就搞定啦!对于一些对话框的自定义,大家可以自己去研究实现,总的来说,EasyPermissions帮我们简化了对权限申请结果的处理,使用简单方便,极力推荐大家使用!