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及以上版本中更加必要。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232194.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 12:50
下一篇 2024-12-11 12:50

相關推薦

發表回復

登錄後才能評論