共享檔案
在此示例中,你將學習如何與其他應用共享檔案。我們將在此示例中使用 pdf 檔案,儘管程式碼也適用於所有其他格式。
路線圖:
指定要放置要共享的檔案的目錄
要共享檔案,我們將使用 FileProvider,這是一個允許在應用程式之間共享檔案的類。FileProvider 只能共享預定義目錄中的檔案,所以我們來定義它們。
-
建立一個包含路徑的新 XML 檔案,例如 res / xml / filepaths.xml
-
新增路徑
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="pdf_folder" path="documents/"/> </paths>
定義 FileProvider 並將其與檔案路徑連結
這是在清單中完成的:
<manifest>
...
<application>
...
<provider
android:name="android.support.v4.context.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
...
</manifest>
生成檔案的 URI
要共享檔案,我們必須提供檔案的識別符號。這是通過使用 URI(統一資源識別符號)來完成的。
// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");
Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);
正如你在程式碼中看到的,我們首先建立一個表示該檔案的新 File 類。要獲取 URI,我們要求 FileProvider 為我們提供一個。第二個引數很重要:它傳遞了 FileProvider 的許可權。它必須等於清單中定義的 FileProvider 的許可權。
與其他應用共享該檔案
我們使用 ShareCompat 與其他應用共享該檔案:
Intent intent = ShareCompat.IntentBuilder.from(getContext())
.setType("application/pdf")
.setStream(uri)
.setChooserTitle("Choose bar")
.createChooserIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Context.startActivity(intent);
選擇器是一個選單,使用者可以從中選擇他/她想要共享檔案的應用程式。需要標誌 Intent.FLAG_GRANT_READ_URI_PERMISSION 來授予對 URI 的臨時讀訪問許可權。