ContentProvider.OpenFile 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
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 開放原始碼專案所建立和共用的工作進行修改,並根據 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)