1、添加依赖:
//EasyPermission
implementation 'pub.devrel:easypermissions:2.0.0'
2、权限拒绝后,弹出的提示设置的弹框内容,需要自己修改:
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).setTitle("权限提示").setRationale("必须打开权限才可以使用!").build().show();
}
3、activity使用EasyPermission:
/**
* Desc: 使用EasyPermission来实现
* FileName: TestEasyPermissionActivity
* Create by: yingbin.bai
* Date: 2019/11/21
* Time: 9:02
* Email: baiyingbin5@163.com
*/
public class TestEasyPermissionActivity extends AppCompatActivity implements View.OnClickListener,EasyPermissions.PermissionCallbacks {
private TextView callTel;//拨号
private TextView openCamera;//打开相机
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission_google_api);
ViewBinder.ActivityBindViews(this);
callTel.setOnClickListener(this);
openCamera.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.callTel://拨号
initPermission();
break;
case R.id.openCamera://打开相机
initPermission();
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//当从软件设置界面,返回当前程序时候
case AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE:
Log.e("EasyPermission","设置未打开授权");
//执行Toast显示或者其他逻辑处理操作
break;
}
}
/**
* 初始化需要动态请求的权限
* 打电话、打开相机
*/
private void initPermission(){
String[] permissions = {Manifest.permission.CALL_PHONE,Manifest.permission.CAMERA};
boolean hasPermissions = checkPermission(TestEasyPermissionActivity.this, permissions);
if (hasPermissions) {
//拥有权限,执行其他操作
}else {
//没有权限,去请求权限
requestPermission(TestEasyPermissionActivity.this,"请求拨号和摄像头权限",1200,permissions);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//Forward results to EasyPermissions
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
Log.e("EasyPermission","用户授权成功");
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
/**
* 若是在权限弹窗中,用户勾选了'NEVER ASK AGAIN.'或者'不在提示',且拒绝权限。
* 这时候,需要跳转到设置界面去,让用户手动开启。
*/
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).setTitle("权限提示").setRationale("必须打开权限才可以使用!").build().show();
}
}
/**
* 检测权限
* @param context Activity
* return true:已经获取权限
* return false: 未获取权限,主动请求权限
*/
public static boolean checkPermission(Activity context, String[] perms) {
return EasyPermissions.hasPermissions(context, perms);
}
/**
* 请求权限
* @param context Activity
*/
public static void requestPermission(Activity context,String tip,int requestCode,String[] perms) {
EasyPermissions.requestPermissions(context, tip,requestCode,perms);
}
}