共用方式為


ContentProvider.OpenFile 方法

定義

多載

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) ,這可讓您視需要串流內容。

<p class=“note”>For use in Intents, you will want to implement #getType to return the appropriate MIME type for the data returned here with the same URI. 這可讓意圖解析自動判斷數據MIME類型,並選取適當的比對目標做為其作業的一部分。

<p class=“note”>為了與其他應用程式提供更好的互操作性,建議針對任何可開啟的 URI,您也支持查詢,其中包含至少由 指定的 android.provider.OpenableColumns數據行。 如果您有其他要提供元數據的常見數據行,例如 android.provider.MediaStore.MediaColumns#DATE_ADDED 在 中 android.provider.MediaStore.MediaColumns,您也可以支援其他通用數據行。</p>

android.content.ContentProvider.openFile(android.net.Uri, java.lang.String)Java 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

另請參閱

  • <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()

<p class=“note”>For use in Intents, you will want to implement #getType to return the appropriate MIME type for the data returned here with the same URI. 這可讓意圖解析自動判斷數據MIME類型,並選取適當的比對目標做為其作業的一部分。

<p class=“note”>為了與其他應用程式提供更好的互操作性,建議針對任何可開啟的 URI,您也支持查詢,其中包含至少由 指定的 android.provider.OpenableColumns數據行。 如果您有其他要提供元數據的常見數據行,例如 android.provider.MediaStore.MediaColumns#DATE_ADDED 在 中 android.provider.MediaStore.MediaColumns,您也可以支援其他通用數據行。</p>

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

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

另請參閱

  • <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)

適用於