首页 > 系统 > Android > 正文

android检测SD卡读写权限方法

2019-10-21 21:43:58
字体:
来源:转载
供稿:网友

一、解析

做项目遇到了一个棘手的问题,SD卡的读写权限问题。

1.android版本在6.0以上版本时,以下代码才有用:

if (Build.VERSION.SDK_INT >= 23) {   UiUtils.getInstance().showToast("1");   //减少是否拥有权限checkCallPhonePermission != PackageManager.PERMISSION_GRANTED   int checkCallPhonePermission = ContextCompat.checkSelfPermission(getApplicationContext(), permission);   if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {    UiUtils.getInstance().showToast("2");    //弹出对话框接收权限    ActivityCompat.requestPermissions(TakeCameraActivity.this, new String[]{permission}, id);    return;   } else {    UiUtils.getInstance().showToast("3");    if(allowableRunnable!=null){     allowableRunnable.run();    }   }  }

因为在android版本5.0以上才把SD卡的读写权限分离开,以前的老版本是没有进行分离的。故找不到SD卡的读写权限,而在测试的过程中,华为的手机出现SD卡读写权限分离在两个地方,有的时候可能不好找,本人就出现这个问题。

二、代码介绍

调用第一个方法:

使用之前先定义两个变量:

 private Map<Integer, Runnable> allowablePermissionRunnables = new HashMap<>(); private Map<Integer, Runnable> disallowablePermissionRunnables = new HashMap<>();

1.”android.permission.WRITE_EXTERNAL_STORAGE”这个是SD卡的写入权限,这里检测一个权限就可以了,不用检测读的权限了。

(1)以下第一个Runnable()中是权限提示框允许之后处理的业务。

(2)第二个Runnable()中是权限提示框拒绝之后执行的业务逻辑。

requestPermission(HDCivilizationConstants.SD_CARD_REQUEST_CODE, "android.permission.WRITE_EXTERNAL_STORAGE", new Runnable() {   @Override   public void run() {   //第一个Runnable    if (type==1){     FileUtils.saveBitmapPng(rectBitmap, pathList, 80);    }else{     try {      FileUtils.saveBitmapJPG(rectBitmap, pathList, 70);     } catch (ContentException e) {      e.printStackTrace();     }    }   }  }, new Runnable() {   @Override   public void run() {   //第二个Runnable//    UiUtils.getInstance().showToast("请查看SD卡的读写权限");    OKPopup.getInstance().showPopup(TakeCameraActivity.this, new OKPopup.BtnClickListener() {     @Override     public void btnOk() {      OKPopup.getInstance().dismissDialog();     }    }, false, HDCivilizationConstants.SDCARD_PERMISSION);   }  });

2.调用上面的那个方法之后会跳转至这个方法(代码如下):

 /**  * 请求权限  * @param id 请求授权的id 唯一标识即可  * @param permission 请求的权限  * @param allowableRunnable 同意授权后的操作  * @param disallowableRunnable 禁止权限后的操作  */ protected void requestPermission(int id, String permission, Runnable allowableRunnable, Runnable disallowableRunnable) {  if(allowableRunnable!=null){   allowablePermissionRunnables.put(id, allowableRunnable);  }  if (disallowableRunnable != null) {   disallowablePermissionRunnables.put(id, disallowableRunnable);  }  //api版本判断  if (Build.VERSION.SDK_INT >= 23) {   UiUtils.getInstance().showToast("1");   //减少是否拥有权限checkCallPhonePermission != PackageManager.PERMISSION_GRANTED   int checkCallPhonePermission = ContextCompat.checkSelfPermission(getApplicationContext(), permission);   if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {    UiUtils.getInstance().showToast("2");    //弹出对话框接收权限    ActivityCompat.requestPermissions(TakeCameraActivity.this, new String[]{permission}, id);    return;   } else {    UiUtils.getInstance().showToast("3");    if(allowableRunnable!=null){     allowableRunnable.run();    }   }  } else {   boolean result = PermissionChecker.checkSelfPermission(this, permission)     == PermissionChecker.PERMISSION_GRANTED;   if(!result){    UiUtils.getInstance().showToast("4");    //如果未授权    ActivityCompat.requestPermissions(TakeCameraActivity.this, new String[]{permission}, id);   }else{    UiUtils.getInstance().showToast("5");    if(allowableRunnable!=null){     allowableRunnable.run();    }   }  } }

3.onRequestPermissionsResult方法是响应2中的方法之后执行。执行代码之后,开始执行Runnable中的代码程序。

 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {  super.onRequestPermissionsResult(requestCode, permissions, grantResults);  if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {   Runnable allowRun = allowablePermissionRunnables.get(requestCode);   if(allowRun!=null){    allowRun.run();   }  } else {   Runnable disallowRun = disallowablePermissionRunnables.get(requestCode);   if(disallowRun!=null){    disallowRun.run();   }  } }

以上这篇android检测SD卡读写权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表