android10适配

 

Android Q文件存储机制修改成了沙盒模式,和IOS神似
应用只能访问自己沙盒下的文件和公共媒体文件
对于Android Q以下,还是使用老的文件存储方式
 
Android Q不再需要申请文件读写权限,默认可以读写自己沙盒文件和公共媒体文件。所以,Q以上不需要再动态申请文件读写权限。
 -----------------

       一、Android Q的私有目录
       这里的私有目录即是 App-specific 目录,具体路径大概是“内部存储设备/Android/data/com.项目包名/”下,这个私有目录:
       (1)APP 卸载在这里插入代码片后,数据会清除。
       (2)APP 访问自己的 App-specific 目录时无需任何权限。
       (3)可以使用FileProvider分享使用自己私有目录的文件。
       所以在沙盒化的Q系统下,在此目录处理文件不会造成垃圾文件对内部存储目录结构影响,卸载后还会自动清除具有很方便的“自消化”特性。在其目录内部的文件操作和Q之前的版本一样,可以随意处理,这里就不做概述了。
       二、Android Q的公共目录
       公共目录有:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones 等。
       (1)公共目录下的文件在 APP 卸载后,不会删除。
       (2)APP 可以通过 SAF框架(System Access Framework)、MediaStore 接口访问其中的文件。
       (3)无法直接使用路径访问公共目录文件。

       由于公共目录没有办法直接访问和处理文件,所以我们需要按照Android Q的新规则来进行文件的处理,要使用到ContentResolver 和MediaStore数据库和Cursor 来进行查询等
 ---------

 Google 在最新的 Android 版本中禁止了,开始用官方推荐的 FileProvider 模式来解决 FileUriExposedException 问题。当然,用官方的方式解决问题,也要对版本进行区分。出去一些 file_path 和 AndroidManiFest 文件的配置,在 Java 中进行如下适配:

  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  if (Build.VERSION.SDK_INT >= 24) {
            Uri apkUri = FileProvider.getUriForFile(context, "com.xxx.xxx.fileprovider", new File(filePath));
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    } else {
            intent.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive");
    }
  try {
           context.startActivity(intent);
      } catch (Exception e) {
            e.printStackTrace();}

异常:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/com.xxx.xxx/cache/xxx.apk
  • 1: Activity 没有注册或者根本没有该 Activity
  • 2:想要调整的应用本地不存在
  • 3:URI 的文件格式不对
  • 4:没有访问 URI 对应的文件的权限

 

参考:https://blog.csdn.net/yehui928186846/article/details/101706238

   https://www.dazhuanlan.com/2019/10/23/5db01b9798489/

https://blog.csdn.net/kai545/article/details/100556189

 

你可能感兴趣的:(android)