十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
怎么在Android 7.0应用之间对文件进行共享?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
专注于为中小企业提供做网站、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业乌尔禾免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了数千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。开发中经常需要将某个文件向另一个应用程序传递,如图片上传到另一个应用程序、文件在不同存储路径之间的复制粘贴等都需要共享文件,可以这样理解接收文件的应用是在向提供文件的应用发送请求。
从 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
指定文件共享路径
在 AndroidManifest 文件中指定 Provider,参考如下:
android:authorities="com.example.myapp.fileprovider" android:grantUriPermissions="true" android:exported="false"> ...
上面代码中在 meta-data 目录中指定了要共享的文件目录,文件目录在 filepathd.xml 中定义,可在相应的 xml 中定义的路径有以下几种,具体参考如下:
在 xml 中表示某个路径需要两个属性,path 表示当前指定目录的子目录,如果不指定则表示的是当前指定目录下的根目录及子目录,name 表示会将 name 添加的 URL 后面作为该文件的访问路径,参考如下:
//表示当前要共享的文件会在 context.getFileDir() 目录下的 images 子目录下查找要共享的文件//表示最终生成的共享的文件URL content://com.example.myapp.fileprovider/myImage/image.jpg
最后,配置完成之后,在所有需要使用文件相关的,在获取 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应用之间对文件进行共享问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。