关于权限管理的相关问题

前言:近期收到市场监管部门的要求,要求app在未获取任何权限的情况下任能正常运行,而我们的app内存卡权限之前一直是必要的权限,于是需要进行修改,主要涉及到的方面就是图片缓存,app更新,保存图片,读取相册,下载视频,数据库,还有一些用户的信息保存。

我这边分为两类,一类是必须要用到读取权限的采用动态获取,不同意就无法正常使用:保存图片,读取相册,下载视频,数据库。

还有一类是非必须用到读取权限的则判断权限是否开启,开启则获取,没开启则用其他方式实现:图片缓存,app更新,用户的信息保存。

第一类我在这边就不多说明了,用到的时候获取权限,第二类我这边说一下:

关于app更新

在应用进入的闪屏页初始化中,首先判断是否拥有SD卡,是否获取了读写SD卡权限:

if (!SdCardUtils.isSdCardExist(AppStart.this)) {
   // 设置应用中保存的根路径
   AppConstants.PARENT_FOLD_PATH = getFilesDir().getAbsolutePath();
}else {
   // 设置应用中保存的根路径
   AppConstants.PARENT_FOLD_PATH = Environment
         .getExternalStorageDirectory() + File.separator + Constants.APP_NAME
         + File.separator;
}

 

/**
 * 判断当前设备上SD卡外部存储是否可用,这里只考虑6.0以上版本
 */
public static boolean isSdCardExist(Context context){
   if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
         != PackageManager.PERMISSION_GRANTED) {
      return false;
   }

   boolean isExist = false;
   isExist = Environment.getExternalStorageState().equals(
         android.os.Environment.MEDIA_MOUNTED);
   return isExist;
}

如果我们关闭了SD卡读写权限,下载的更新包就会下载到内部存储空间

/**
 * 构造更新的软件的安装包的保存路径名 
 */
public static final String buildUpdateAPKPath() {
   if (!SdCardUtils.isSdCardExist(AppContext.getInstance()) && fileDir != null && fileDir.exists()) {
      return fileDir.toString() + "/";
   }
   String filePath = FileUtils.buildFilePath(new String[] { SdCardUtils.getSdCardPath(), APP_NAME });
   File dir = new File(filePath);
   if (!dir.exists()) {
      dir.mkdirs();
   }
   return filePath;
}

应用下载完毕,我们查看一下应用目录,发现更新包已经被下载下来了。

图片缓存:

内存卡读取权限没开的情况下,就采用网络缓存图片的方式

其中权限判断的条件这边每个app都不一样,仅供参考

用户的信息保存

用户信息的保存比较简单,换成sp的保存方式就好了

额外再补充一个地方:

 

图中是华为应用市场直接下载下来的京东,淘宝,还有一淘,大家会发现和传统的系统权限弹窗不一样,一开始我也弄了很久,最后开窍了,也去市场下载了我们的app,发现第一次启动也是这样的多权限同时提示的弹框,但是大家要注意的是,从应用市场下载下来第一次启动才会以这样的样式出现,假如拒绝相应权限重启后,则恢复传统的系统权限弹窗,且非应用市场安装即自己安装的app也是传统的系统权限弹窗。

 

 

最后还要加一点补充,上面说的apk更新,理论上是没问题,但现实很骨感,部分机型反而有问题,只能仁者见仁智者见智,下面是我项目中的选择方案,另外我也测试了淘宝在没有存储权限的情况下,也是在sd卡里进行下载和安装apk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值