語言

ContentProvider.OpenFile 方法

定義

多載

名稱 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中,你也可以支援其他常見欄位。

Java 文件 android.content.ContentProvider.openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal)

本頁部分內容為基於 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)

適用於