ContentProvider.OpenFile 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| OpenFile(Uri, String) |
會覆寫這個指令來處理開啟檔案 blob 的請求。 |
| OpenFile(Uri, String, CancellationSignal) |
會覆寫這個指令來處理開啟檔案 blob 的請求。 |
OpenFile(Uri, String)
會覆寫這個指令來處理開啟檔案 blob 的請求。
[Android.Runtime.Register("openFile", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;", "GetOpenFile_Landroid_net_Uri_Ljava_lang_String_Handler")]
public virtual Android.OS.ParcelFileDescriptor? OpenFile(Android.Net.Uri uri, string mode);
[<Android.Runtime.Register("openFile", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;", "GetOpenFile_Landroid_net_Uri_Ljava_lang_String_Handler")>]
abstract member OpenFile : Android.Net.Uri * string -> Android.OS.ParcelFileDescriptor
override this.OpenFile : Android.Net.Uri * string -> Android.OS.ParcelFileDescriptor
參數
- uri
- Uri
要開啟檔案的URI。
- mode
- String
檔案模式的字串表示法。 可以是「r」、「w」、「wt」、「wa」、「rw」或「rwt」。 請注意,這些實作的具體實作可能因提供者而異——例如,「w」可能會截斷也可能不會截斷。
傳回
會回傳一個新的 ParcelFileDescriptor,你可以用來存取該檔案。
- 屬性
例外狀況
如果該 URI 沒有相關檔案或該模式無效,則會拋出 FileNotFoundException。
若呼叫者無權限存取檔案,則會拋出 SecurityException。
備註
會覆寫這個指令來處理開啟檔案 blob 的請求。 預設實作總是拋 FileNotFoundException出 。 此方法可從多個執行緒呼叫,詳見 《程序與執行緒》一文。
此方法會回傳一個 ParcelFileDescriptor,並直接回傳給呼叫者。 如此一來,大型資料(如圖片和文件)可以在不複製內容的情況下回傳。
回傳的 ParcelFileDescriptor 是呼叫者擁有的,因此完成後由他們負責關閉。 也就是說,此方法的實作應該為每次呼叫建立一個新的 ParcelFileDescriptor。
若以專屬的「r」或「w」模式開啟,回傳的 ParcelFileDescriptor 可為管道或套接字對,以支援資料串流。 以「rw」或「rwt」模式開啟,表示磁碟上有支援尋道的檔案。
如果你需要偵測回傳的 ParcelFileDescriptor 是否已關閉,或遠端程序當機或遇到其他錯誤,可以使用 ParcelFileDescriptor#open(File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener)、 ParcelFileDescriptor#createReliablePipe()、 ParcelFileDescriptor#createReliableSocketPair()或 。
如果你需要回傳一個沒有實體檔案備份的大型檔案,例如網路共享或雲端儲存服務上的檔案,可以考慮使用 StorageManager#openProxyFileDescriptor(int, android.os.ProxyFileDescriptorCallback, android.os.Handler) 這些檔案,讓你能隨選串流內容。
在 Intent 中使用時,你需要實作 #getType 回傳這裡資料的適當 MIME 類型,且使用相同的 URI。 這將允許意圖解析自動決定資料 MIME 類型,並選擇適當的匹配目標作為操作的一部分。
為了與其他應用程式更好的互通性,建議對於任何可開啟的 URI,也應支援至少包含由 android.provider.OpenableColumns所指定的欄位的查詢。 如果你還有額外的元資料要提供 android.provider.MediaStore.MediaColumns#DATE_ADDED ,例如在 android.provider.MediaStore.MediaColumns中,你也可以支援其他常見欄位。
Java 文件 android.content.ContentProvider.openFile(android.net.Uri, java.lang.String)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- <xref:Android.Content.ContentProvider.OpenAssetFile(Android.Net.Uri%2c+System.String)>
- <xref:Android.Content.ContentProvider.OpenFileHelper(Android.Net.Uri%2c+System.String)>
- GetType(Uri)
- ParseMode(String)
適用於
OpenFile(Uri, String, CancellationSignal)
會覆寫這個指令來處理開啟檔案 blob 的請求。
[Android.Runtime.Register("openFile", "(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;", "GetOpenFile_Landroid_net_Uri_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")]
public virtual Android.OS.ParcelFileDescriptor? OpenFile(Android.Net.Uri uri, string mode, Android.OS.CancellationSignal? signal);
[<Android.Runtime.Register("openFile", "(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;", "GetOpenFile_Landroid_net_Uri_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")>]
abstract member OpenFile : Android.Net.Uri * string * Android.OS.CancellationSignal -> Android.OS.ParcelFileDescriptor
override this.OpenFile : Android.Net.Uri * string * Android.OS.CancellationSignal -> Android.OS.ParcelFileDescriptor
參數
- uri
- Uri
要開啟檔案的URI。
- mode
- String
檔案模式的字串表示法。 可以是「r」、「w」、「wt」、「wa」、「rw」或「rwt」。 請注意,這些實作的具體實作可能因提供者而異——例如,「w」可能會截斷也可能不會截斷。
- signal
- CancellationSignal
一個取消正在進行的行動的信號,或者 null 如果沒有。 例如,如果你正在從網路下載檔案以處理「rw」模式請求,你應該定期打電話 CancellationSignal#throwIfCanceled() 確認客戶端是否已取消請求並中止下載。
傳回
會回傳一個新的 ParcelFileDescriptor,你可以用來存取該檔案。
- 屬性
例外狀況
如果該 URI 沒有相關檔案或該模式無效,則會拋出 FileNotFoundException。
若呼叫者無權限存取檔案,則會拋出 SecurityException。
備註
會覆寫這個指令來處理開啟檔案 blob 的請求。 預設實作總是拋 FileNotFoundException出 。 此方法可從多個執行緒呼叫,詳見 《程序與執行緒》一文。
此方法會回傳一個 ParcelFileDescriptor,並直接回傳給呼叫者。 如此一來,大型資料(如圖片和文件)可以在不複製內容的情況下回傳。
回傳的 ParcelFileDescriptor 是呼叫者擁有的,因此完成後由他們負責關閉。 也就是說,此方法的實作應該為每次呼叫建立一個新的 ParcelFileDescriptor。
若以專屬的「r」或「w」模式開啟,回傳的 ParcelFileDescriptor 可為管道或套接字對,以支援資料串流。 以「rw」或「rwt」模式開啟,表示磁碟上有支援尋道的檔案。
如果你需要偵測回傳的 ParcelFileDescriptor 是否已關閉,或遠端程序當機或遇到其他錯誤,可以使用 ParcelFileDescriptor#open(File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener)、 ParcelFileDescriptor#createReliablePipe()、 ParcelFileDescriptor#createReliableSocketPair()或 。
在 Intent 中使用時,你需要實作 #getType 回傳這裡資料的適當 MIME 類型,且使用相同的 URI。 這將允許意圖解析自動決定資料 MIME 類型,並選擇適當的匹配目標作為操作的一部分。
為了與其他應用程式更好的互通性,建議對於任何可開啟的 URI,也應支援至少包含由 android.provider.OpenableColumns所指定的欄位的查詢。 如果你還有額外的元資料要提供 android.provider.MediaStore.MediaColumns#DATE_ADDED ,例如在 android.provider.MediaStore.MediaColumns中,你也可以支援其他常見欄位。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- <xref:Android.Content.ContentProvider.OpenAssetFile(Android.Net.Uri%2c+System.String)>
- <xref:Android.Content.ContentProvider.OpenFileHelper(Android.Net.Uri%2c+System.String)>
- GetType(Uri)
- ParseMode(String)