您的位置:

Android文件共享——使用FileProvider轻松完成

Android文件共享——使用FileProvider轻松完成

更新:

一、FileProvider介绍

FileProvider是Android支持库中的一个类,用于解决在Android应用间共享文件的问题。通常情况下,我们通过File类来获取一个文件的路径,但在Android 7.0及以上的版本中,由于更加严格的安全机制,直接使用File的方法已经不能满足我们的需求了。这时需要使用FileProvider来管理我们的文件。

二、使用FileProvider实现文件共享

接下来,我们将通过一个简单的例子来演示如何使用FileProvider实现文件共享。

1.在AndroidManifest.xml中声明FileProvider

    <!-- 定义FileProvider -->
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.fileprovider"
        android:grantUriPermissions="true"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

在provider标签的authorities属性中填写FileProvider的权限名。注意,这个权限名需要和后面要声明的path中的路径对应。

meta-data标签中的resource属性指向了provider_paths.xml文件,这个文件定义了我们要共享的文件路径。接下来,我们将详细介绍这个文件的内容。

2.在res/xml文件夹下创建provider_paths.xml文件

    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <root-path name="root" path="." />
        <files-path name="files" path="." />
        <cache-path name="cache" path="." />
        <external-path name="external" path="." />
        <external-files-path name="external_files" path="." />
        <external-cache-path name="external_cache" path="." />
    </paths>

在这个文件中,我们可以定义多种路径,以便于共享多个文件。这里我定义了6种路径类型(root, files, cache, external, external_files, external_cache),分别对应于应用内部存储、应用内部文件存储、应用内部缓存存储、外部存储、外部存储文件存储、外部缓存存储。

3.通过FileProvider.getUriForFile()方法获取文件Uri

    private Uri getFileUri(Context context, File file) {
        return FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileprovider", file);
    }

利用getContext().getApplicationContext()获取Application上下文并拼接FileProvider的权限名,通过FileProvider.getUriForFile()方法获取文件Uri。

4.使用共享的Uri

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("application/vnd.android.package-archive");
    Uri uri = getFileUri(getContext(), new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "test.apk"));
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    getContext().startActivity(intent);

将获取到的Uri放入Intent中,通过addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)给其他应用授予读取共享文件的权限。

三、小结

本文主要介绍了FileProvider的使用方法,只需要声明好FileProvider,定义好文件路径,通过FileProvider.getUriForFile()获取文件Uri,最后将Uri放入Intent中即可达到文件共享的目的。与直接使用File的方法相比,使用FileProvider不仅更加安全,而且在Android 7.0及以上版本中更加必要。

Android文件共享——使用FileProvider轻松完

一、FileProvider介绍 FileProvider是Android支持库中的一个类,用于解决在Android应用间共享文件的问题。通常情况下,我们通过File类来获取一个文件的路径,但在And

2023-12-08
Android 7.0更新了哪些新功能?

一、多窗口模式 Android 7.0增加了多窗口模式的支持,使得用户可以同时在同一个屏幕上运行两个应用程序,可以通过设置和管理应用程序来轻松地切换和调整大小,让用户能够更好地进行多任务处理。 开启多

2023-12-08
Android Studio4.0:轻松创建跨平台应用程序

2023-05-14
用VSCode轻松构建Android应用!

随着移动互联网的快速发展,越来越多的人开始加入到移动应用开发的行列中来。对于初学者来说,在Android开发中选择一款好用的开发工具可以事半功倍。本文将介绍如何利用VSCode快速构建Android应

2023-12-08
使用Realm轻松实现Android本地数据存储

随着移动互联网的快速发展,手机APP正成为人们日常生活中必不可少的一部分。而在APP的开发过程中,数据存储是一个非常核心的部分。为了让数据的读取和操作更加轻松高效,开发人员需要一个可靠的本地数据存储框

2023-12-08
使用Android Studio轻松实现无线调试

2023-05-14
使用Python实现Android文件上传功能,轻松实现文件

2023-05-14
分享Android文件的便捷方法

2023-05-14
阿里云笔记的功能与使用详解

2023-05-21
Android共享内存实现进程间通信

一、什么是共享内存 共享内存是一种IPC(进程间通信)的方式,它可以在多个进程间共享一段地址空间,从而达到通信的目的。共享内存通信的优点是速度快,因为不需要复制数据,而是直接操作内存中的数据。共享内存

2023-12-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
轻松实现Android翻译功能

2023-05-14
用Python编写Android工具链,轻松构建Androi

2023-05-14
Android PlatformTools:轻松操作您的An

2023-05-14
Android内核跨进程共享内存的高效实现方式:ashmem

2023-05-18
Ubuntu同步 - 使用同步功能轻松备份和共享您的文件

2023-05-17
快速安装Android应用程序,轻松享受功能丰富的移动应用

2023-05-14
Android Studio中如何使用Github实现版本控

2023-05-14
使用UbuntuAndroid模拟器,让你轻松运行Andro

2023-05-14
使用CMake构建Android项目的高效方法

一、CMake简介 CMake是一个跨平台的编译工具,它可以生成与平台无关的makefile、Visual Studio等项目文件,快速轻松地构建和管理代码。CMake支持多种编程语言,包括C++、J

2023-12-08