安卓6.0动态申请权限
来源:互联网 发布:女性职场穿着知乎 编辑:程序博客网 时间:2024/06/06 23:17
现在安卓6.0申请权限的开源代码也很多,但是不想项目里引用的东西太多,能不搬的就不搬了,自己写了一个申请权限的,在Gerymontion上测试,还能用,如果有需要改善的,请留言.
1 写一个接口
public interface PermissionListener { //有权限或者申请的时候给了,就继续做下面的动作 void hasPermission() ; //没有权限 void hasNoPermission() ; //点了不再提示 void neverShowPermission();}
2 写一个申请的工具类
public enum PermissionUtil { INSTRANSE ; private PermissionListener permissionListener ; //请求权限 public void responsePermission(AppCompatActivity appCompatActivity ,PermissionListener permissionListener, String... permissionName) { this.permissionListener = permissionListener; if (Build.VERSION.SDK_INT >= 23) { List<String> pList = new ArrayList<>(); for (String str : permissionName) { pList.add(str); } String[] strings = pList.toArray(new String[pList.size()]); boolean bb = checkPermissionAllGranted(appCompatActivity, strings); if (!bb) { //如果没有,请求 ActivityCompat.requestPermissions(appCompatActivity, strings, Constants.permissionStr.permissionResponse); } else { //有权限 permissionListener.hasPermission(); } }else{ //小于23,没必要申请 permissionListener.hasPermission(); } } /** * 检查APP是否拥有指定的所有权限 */ protected boolean checkPermissionAllGranted(Context mContext, String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(mContext, permission) != PackageManager.PERMISSION_GRANTED) { // 只要有一个权限没有被授予, 则直接返回 false return false; } } return true; } public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults,AbstractActivity activity){ if (requestCode == Constants.permissionStr.permissionResponse) { if (PackageManager.PERMISSION_GRANTED == grantResults[0] ) { //给了权限可以直接去操作 permissionListener.hasPermission(); } else { if(neverShow(permissions, activity)){ permissionListener.neverShowPermission(); }else{ permissionListener.hasNoPermission(); } } } } //在用户已经拒绝授权的情况下,如果shouldShowRequestPermissionRationale返回false则 // 可以推断出用户选择了“不在提示”选项,在这种情况下需要引导用户至设置页手动授权 private boolean neverShow(String permissions[], AbstractActivity activity){ boolean showagain ; if (!ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[0])) { showagain = true ; }else{ showagain = false ; } return showagain ; }}3 假如用户点了不再提示,提示用户去设置(这个bug肯定是有的,自行解决,我们是特定的机型,所以不需要适配其他机型)
public enum DailogUtil { INSTRANS; public void getDailog(final AbstractActivity activity, final PermissionListener permissionListener) { new AlertDialog.Builder(activity) .setMessage("权限都不给我,你还想使用APP吗?去设置页面手动授权再来吧!!!!") .setPositiveButton("去授权", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //引导用户至设置页手动授权 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); //Constants.packageName 项目的包名,你可以写死 Uri uri = Uri.fromParts("package", Constants.packageName, null); intent.setData(uri); activity.startActivity(intent); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //引导用户手动授权,权限请求失败 permissionListener.hasNoPermission(); } }).setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { //引导用户手动授权,权限请求失败 permissionListener.hasNoPermission(); } }).show(); }}4 在申请的Activity里面去申请
4.1 定义PermissionListener
PermissionListener permissionListener ;
4.2 初始化接口permissionListener= new PermissionListener() { @Override public void hasPermission() { Log.e("MainActivity-->","申请成功"); // TODO: 2017/12/20 } @Override public void hasNoPermission() { Log.e("MainActivity-->","申请失败"); // TODO: 2017/12/20 } @Override public void neverShowPermission() { Log.e("MainActivity-->","点击了不再提示"); DailogUtil.INSTRANS.getDailog(MainActivity.this , permissionListener ); }};5 点击调用case R.id.requestpermission: /** * Manifest.permission.WRITE_EXTERNAL_STORAGE; * Manifest.permission.WRITE_SETTINGS; * 定义成常量了 */ PermissionUtil.INSTRANSE.responsePermission(this, permissionListener, new String[]{ Constants.permissionStr.WRITE_EXTERNAL_STORAGE,Constants.permissionStr.Setting }); break;5 重写 onRequestPermissionsResult@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { PermissionUtil.INSTRANSE.onRequestPermissionsResult(requestCode,permissions,grantResults,this);}6 打完收工
阅读全文
0 0
- 安卓6.0+动态权限申请
- 安卓6.0以后动态申请权限
- 安卓6.0动态申请权限
- 安卓动态申请权限
- 安卓6.0动态权限申请问题,可见链接
- 安卓·动态权限申请
- 安卓7.0动态权限申请
- 安卓权限申请
- 安卓申请权限
- 安卓6.0 WRITE_SETTINGS权限申请
- 安卓6.0权限申请步骤
- 安卓6.0权限申请封装
- 安卓6.0权限申请另一种实现
- 安卓动态申请拍照权限,记录一下
- Android 6.0 动态申请权限
- android 6.0权限动态申请
- Android 6.0 动态权限申请
- Android 6.0权限动态申请
- C#: indexof的简单使用
- 浅谈自己理解的socket(1)
- Oracle正则表达式使用介绍
- maven仓库中的jar解析失败
- 解决VMware Pro 14安装Linux镜像时黑屏问题
- 安卓6.0动态申请权限
- Day013
- HDU1128 UVA640 UVALive5326 ZOJ1180 Self Numbers【水题】
- EasyUI 进度条
- Mybatis查询复杂对象(对象包括对象和List<对象>)
- layui父页面获取子页面的窗口对象
- java排序算法
- spark scala 对dataframe进行过滤----filter方法使用
- 常用JS插件