一、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