随着Android版本越来越高,Android官方对用户数据保护力度也越来越大。Android提供FileProvider类来供应用之间共享数据。

像我们的应用安装更新,利用相机拍照然后进行图片处理,或者把文件分享给其他应用,可能都会用到这些知识点

类似于这样

<?xml version="1.0" encoding="utf-8"?>            

FileProvider所支持的几种path类型

从Android官方文档上可以看出FileProvider提供以下几种path类型:

该方式提供在应用的内部存储区的文件/子目录的文件。它对应Context.getFilesDir返回的路径:eg:”/data/data/com.richard.simple/files”。

该方式提供在应用的内部存储区的缓存子目录的文件。它对应getCacheDir返回的路径:eg:“/data/data/com.richard.simple/cache”;

该方式提供在外部存储区域根目录下的文件。它对应Environment.getExternalStorageDirectory返回的路径:eg:”/storage/emulated/0”;

该方式提供在应用的外部存储区根目录的下的文件。它对应Context.getExternalFilesDir(String) 返回的路径。eg:”/storage/emulated/0/Android/data/com.jph.simple/files”。

该方式提供在应用的外部缓存区根目录的文件。它对应Context.getExternalCacheDir()返回的路径。eg:”/storage/emulated/0/Android/data/com.richard.simple/cache”。

使用方式就是这样

  1. 在AndroidManifest的application下面注册
                
  1. 编写path文件
<?xml version="1.0" encoding="utf-8"?>            
  1. 调用方式(此处以安装更新为例)
private void installApk() {        Intent intent = new Intent(Intent.ACTION_VIEW);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);            Uri contentUri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID + ".provider", new File(savePath));            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");            PalmApp.getContext().startActivity(intent);        }else {            intent.setDataAndType(Uri.fromFile(new File(savePath)), "application/vnd.android.package-archive");            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        }    }

savaPath为apk存放的路径,此处放到了应用下files文件夹,也就是

savaPath = getContext().getFilesDir().getAbsolutePath() +"/update.apk"

注意

  1. android:authorities的配置一定要和FileProvider.getUriForFile()方法的第二个参数一致
  2. BuildConfig.APPLICATION_ID不要导错了包,用当前应用下面的BuildConfig

更多相关文章

  1. Android(安卓)Lottie动画
  2. Android入门进阶教程(4)-android hello world开发
  3. 专题 - Web应用
  4. Android平台特性
  5. Android应用程序与SurfaceFlinger服务的关系概述和学习计划
  6. Android系统构架简介
  7. Android中使用硬盘模拟SD卡
  8. Pycharm安装PyQt5的详细教程
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)显示GIF图片实例详解
  2. Android中弹窗中带有Edittext,软键盘遮挡
  3. 记一次Build.gradle引发的ClassNotFound
  4. android中的数据存储方式(二)SQLite
  5. 第3章 UI
  6. 2020上半年百度Android岗(初级到高级)面试
  7. 【Android学习系列】Android- Service总
  8. android 中的两个文件夹res/raw和assets
  9. Android(安卓)4.2.2字体渲染流程
  10. android 学习 -- 插件形开发,动态部署,消息