直接前往內容

最常造訪的網頁

最近瀏覽的網頁

navigation

限定範圍目錄存取

應用程式 (例如,相片應用程式) 通常只需要存取外部儲存空間中的特定目錄,例如 Pictures 目錄。 目前用來存取外部儲存空間的方式並非設計來輕鬆地為這些類型的應用程式提供已設定目標的目錄存取。 例如:

Android N 提供新的簡化 API,可用來存取常用外部儲存空間目錄。

存取外部儲存空間目錄

使用 StorageManager 類別來取得適當的 StorageVolume 實例。 接著,透過呼叫該實例的 StorageVolume.createAccessIntent() 方法以建立意圖。使用此意圖來存取外部儲存空間目錄。 若要取得所有可用的磁碟區 (包括抽取式媒體磁碟區) 清單,請使用 StorageManager.getVolumesList()

下列程式碼片段是一個範例,它說明如何開啟主要共用儲存空間中的 Pictures 目錄:

StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
StorageVolume volume = sm.getPrimaryVolume();
Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
startActivityForResult(intent, request_code);

系統會嘗試授予對外部目錄的存取權,並在需要時使用簡化的 UI 向使用者確認存取權:

圖 1. 應用程式要求對 [圖片] 目錄的存取權。

若使用者授予存取權,系統會呼叫您的 onActivityResult() 覆寫並傳回 Activity.RESULT_OK 的結果代碼,以及包含 URI 的意圖資料。 使用提供的 URI 來存取目錄資訊,這類似於使用儲存空間存取架構所傳回的 URI。

若使用者未授予存取權,系統會呼叫您的 onActivityResult() 覆寫並傳回 Activity.RESULT_CANCELED 的結果代碼,以及 Null 意圖資料。

注意:取得對特定外部目錄的存取權也會取得對該目錄之子目錄的存取權。

存取抽取式媒體上的目錄

若要使用「限定範圍目錄存取」來存取抽取式媒體上的目錄,請先新增會接聽 MEDIA_MOUNTED 通知的 BroadcastReceiver,例如:

<receiver
    android:name=".MediaMountedReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <data android:scheme="file" />
    </intent-filter>
</receiver>

當使用者掛接抽取式媒體 (例如 SD 卡) 時,系統會傳送 MEDIA_MOUNTED 通知。 此通知會在意圖資料中提供 StorageVolume 物件,讓您用來存取抽取式媒體上的目錄。 下列範例會存取抽取式媒體上的 Pictures 目錄:

// BroadcastReceiver has already cached the MEDIA_MOUNTED
// notification Intent in mediaMountedIntent
StorageVolume volume = (StorageVolume)
    mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
startActivityForResult(intent, request_code);

最佳做法

如果可能,請將外部目錄存取 URI 設定為持續性,這樣您就不需要重複地要求使用者授予存取權。 一旦使用者授予存取權,請使用目錄存取 URI 呼叫 getContentResolver().takePersistableUriPermssion()。 系統會將該 URI 設定為持續性,而且後續存取要求將會傳回 RESULT_OK,而且不會為使用者顯示確認 UI。

若使用者拒絕對外部目錄的存取權,請勿立刻又要求存取權。 重複堅持取得存取權會導致極差的使用者體驗。

本網站使用 Cookie 儲存你在此指定的語言和顯示選項偏好設定。

掌握有關 Android 開發人員的最新消息和實用訣竅,協助你製作最受歡迎的 Google Play 內容。

* 必填欄位

訂閱成功!

在 WeChat 上追蹤 Google Developers

你要以瀏覽這個網站嗎?

你要求以顯示這個網頁,但你為此網站指定的語言偏好設定為

是否要變更語言偏好設定並改用瀏覽網站?稍後如要變更語言偏好設定,請利用位在每個網頁最下方的語言選單來調整設定。

你的 API 層級必須達 以上才能存取這個級別

本說明文件已隱藏,因為你為該文件選取的 API 層級為 。使用左側導覽列上方的選取工具即可變更說明文件的 API 層級。

如需進一步瞭解如何為應用程式指定 API 層級的相關資訊,請參閱 Supporting Different Platform Versions (支援不同的平台版本) (英文)。

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)