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)