一:EasyPermissions系统权限库
easyPermissions:是简单的系统权限库,并干掉6.+++以上的系统权限问题。
优点:它也简化了我们的操作,提升了效率,内部的封装使得我们的代码减少了很多,下面我们来看一下它的自我介绍:
github 地址:https://github.com/jiezongnewstar/easypermissions
佳姝1:添加依赖。
implementation 'pub.devrel:easypermissions:2.0.1'佳姝2:实现接口【implements EasyPermissions.PermissionCallbacks】,如图:
重写授权成功和失败的回调:
@Override public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) { //已授予某些权限 //1.先检查自己是否申请过权限 (如果是) ->不处理 //2.没有申请过权限 注册权限 确认是否开启 (如果是)-> 不处理 //3.(如果不是)-> 弹出弹框提示" 确保应用正常使用,请开启权限!" (如果不是)-> 不处理 //4.是 调用流程 ->第2步用户永远禁止那么会出现死循环,直到用户允许为止。 } @Override public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) { //否认,弹出对话框,直到用户允许此权限为止,才不会走此方法。 new AlertDialog.Builder(this) .setMessage("是否使用此权限") .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).setPositiveButton("Sure", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { hasPermissions(); } }).show(); }知识:常用权限(可能不全)
SMS(短信) SEND_SMS RECEIVE_SMS
READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS
STORAGE(存储卡-读写权限) READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE
CONTACTS(联系人) READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS
PHONE(手机) READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS
CALENDAR(日历) READ_CALENDAR WRITE_CALENDAR
CAMERA(相机) ACCESS_FINE_LOCATION
LOCATION(位置) ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION
SENSORS(传感器) BODY_SENSORS
MICROPHONE(麦克风) RECORD_AUDIO
佳姝3:根据自己需求手动添加请求权限。
//相机摄像头权限,自己可以添加需要判断的权限. String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CAMERA}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); hasPermissions(); } //检查自己是否申请过权限 private void hasPermissions() { if (!EasyPermissions.hasPermissions(this, perms)) { EasyPermissions.requestPermissions(new PermissionRequest.Builder(this, 2000, perms).build()); } }佳姝4:重写回调方法。
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // 将结果转发到easypermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }