热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android7.0应用之间如何共享文件

这篇文章主要介绍了Android7.0应用之间如何共享文件,帮助大家更好的理解和使用Android进行开发,感兴趣的朋友可以了解下

开发中经常需要将某个文件向另一个应用程序传递,如图片上传到另一个应用程序、文件在不同存储路径之间的复制粘贴等都需要共享文件,可以这样理解接收文件的应用是在向提供文件的应用发送请求。

从 Android 7.0 开始,Android 执行 StrictMode 策略,禁止在应用外部公开 file://URL,如果在 Android 7.0 以上的应用不使用 FileProvider ,则会抛出 FileUriExposedException 异常,Android 7.0 以后要在应用之间共享文件要使用 content://URL 授予 URL 临时访问权限,即要使用 FileProvider 的方式来授予临时访问权限,具有临时访问权限的 URL 是安全的,这种临时的 URL 会自动过期,其中 FileProvider 提供的 getUriForFile() 用于生成文件的内容。

在所有情况下,从您的应用程序向另一个应用程序提供文件的唯一安全方法是向接收应用程序发送文件的内容URI,并授予该URI的临时访问权限。具有临时URI访问权限的内容URI是安全的,因为它们仅适用于接收URI的应用程序,并且它们会自动过期。 Android FileProvider组件提供getUriForFile()方法,用于生成文件的内容URI。

这里也会提到一个在 Android 7.0 及更高版本时经常出现的异常:FileUriExposedException,通过使用 FileProvider 就可以解决该异常,当然这也是 Android 系统在安全性上不断完善的结果。

  • 指定FileProvider
  • 指定文件共享路径

指定FileProvider

在 AndroidManifest 文件中指定 Provider,参考如下:


 
  
  
  
   
  
  ...
 

指定文件共享路径

上面代码中在 meta-data 目录中指定了要共享的文件目录,文件目录在 filepathd.xml 中定义,可在相应的 xml 中定义的路径有以下几种,具体参考如下:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

  
  
  
  
  
  
  
  
  
  
  
  

 

在 xml 中表示某个路径需要两个属性,path 表示当前指定目录的子目录,如果不指定则表示的是当前指定目录下的根目录及子目录,name 表示会将 name 添加的 URL 后面作为该文件的访问路径,参考如下:

//表示当前要共享的文件会在 context.getFileDir() 目录下的 images 子目录下查找要共享的文件

 


//表示最终生成的共享的文件URL
content://com.example.myapp.fileprovider/myImage/image.jpg

获取Uri

最后,配置完成之后,在所有需要使用文件相关的,在获取 Url 时应该按照如下方式获取,具体如下:

public Uri getUri(File file) {
 Uri uri = null;
 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  uri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".youName", file);
 } else {
  uri = Uri.fromFile(file);
 }
 return uri;
}

这样就可以在 Android 7.0 以上愉快的共享文件了,这个知识点也算是开发中经常会遇到到。

以上就是Android 7.0应用之间如何共享文件的详细内容,更多关于Android 7.0 共享文件的资料请关注其它相关文章!


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
author-avatar
tina1314520hqg_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有