Android 7.0 FileProvider使用

简介: 1). FileProviderAndroid 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译版本低于25仍然不会受到影响),android框架使用StrictMode Api禁止我们的应...
1). FileProvider

Android 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译版本低于25仍然不会受到影响),android框架使用StrictMode Api禁止我们的应用对外部(跨越应用分享)公开file://,若使用file://格式共享文件则会报FileUriExposedException异常,android 7.0应用间的文件共享需要使用content://类型的URI分享,并且需要为其提供临时的文件访问权限
(Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION),对此,官方给我们的建议是使用FileProvider类进行分享。

2). 使用步骤
  • manifest中声明FileProvider
  • res/xml中定义对外暴露的文件夹路径
  • 生成content://类型的Uri
  • 给Uri授予临时权限
  • 使用Intent传递Uri
3). AndroidManifest.xml文件声明
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="<包名>.fileProvider"
        android:grantUriPermissions="true"
        android:exported="false">
      <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/file_paths"/>
    </provider>
  • name:provider的类名,若使用默认的v4的FileProvider可使用”android.support.v4.content.FileProvider”,也可以设置为自定义的继承FileProvider的provider类;
  • authorities:一个签名认证,可以自定义,但在获取uri的时候需要保持一致;
  • grantUriPermissions:使用FileProvider的使用需要我们给流出的URI赋予临时访问权限(READ和WRITE),该设置是允许我们行使该项权力;
  • meta-data:meta-data配置的是我们可以访问的文件的路径配置信息,需要使用xml文件进行配置,FileProvider会通过解析xml文件获取配置项,其中name名字不可改变为:android.support.FILE_PROVIDER_PATHS,resource为配置路径信息的配置项目。
4). xml配置
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <paths>
    <!-- Context.getFilesDir() + "/path/" -->
    <files-path
        name="my_files"
        path="mazaiting/"/>
    <!-- Context.getCacheDir() + "/path/" -->
    <cache-path
        name="my_cache"
        path="mazaiting/"/>
    <!-- Context.getExternalFilesDir(null) + "/path/" -->
    <external-files-path
        name="external-files-path"
        path="mazaiting/"/>
    <!-- Context.getExternalCacheDir() + "/path/" -->
    <external-cache-path 
         name="name" 
         path="mazaiting/" />
    <!-- Environment.getExternalStorageDirectory() + "/path/" -->
    <external-path
        name="my_external_path"
        path="mazaiting/"/>
    <!-- Environment.getExternalStorageDirectory() + "/path/" -->
    <external-path
        name="files_root"
        path="Android/data/<包名>/"/>
    <!-- path设置为'.'时代表整个存储卡 Environment.getExternalStorageDirectory() + "/path/"   -->
    <external-path
        name="external_storage_root"
        path="."/>
  </paths>
</resources>
img_acec241f6307c21611977b911c865a1e.png
图1.png
5). 生成Uri
      Uri contentUri = FileProvider.getUriForFile(context,
              BuildConfig.APPLICATION_ID + ".fileProvider",
              new File(path));
6). 授予临时权限
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
7). 传递
      intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
8). 安装应用代码
img_2841e81d7522bfbb41c32999e8a749a0.png
图2.png
目录
相关文章
|
6月前
|
XML 搜索推荐 Java
Android Studio开发之借助FileProvider在应用之间共享文件讲解及实战(包括发送彩信,安装应用等 附源码超详细)
Android Studio开发之借助FileProvider在应用之间共享文件讲解及实战(包括发送彩信,安装应用等 附源码超详细)
208 0
|
14天前
|
程序员 Android开发
|
XML 缓存 API
Android 7.0之访问文件的权限和FileProvider类
转载请标明出处: http://blog.csdn.net/djy1992/article/details/72533310 本文出自:【奥特曼超人的博客】 权限更改 Android 7.0 做了一些权限更改,这些更改可能会影响您的应用。
3699 0
|
存储 Android开发
【错误记录】Android 文件分享 FileProvider 设置错误
【错误记录】Android 文件分享 FileProvider 设置错误
208 0
【错误记录】Android 文件分享 FileProvider 设置错误
|
Android开发
Android 7.0相机适配及FileProvider重复那些坑
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Android 7.0相机拍照适配 (1)首先必须获取拍照的权限 简单一点的可以直接用ActivityCompat的requestPermissions方法 ActivityCompat.
3423 0
|
7天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
6天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
19 5
|
4天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
6天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
17 3