客户端应用在尝试处理其具有内容 URI 的文件之前,可以 从服务器应用请求有关文件的信息,包���文件的数据������和 文件大小。数据类型可帮助客户端应用确定是否可以处理相应文件,以及 文件大小有助于客户端应用为文件设置缓冲和缓存。
本课演示了如何查询服务器应用的
FileProvider
,用于检索文件的 MIME 类型和大小。
检索文件的 MIME 类型
文件的数据类型可以指示客户端应用应如何处理文件内容。要获得
根据共享文件的内容 URI,确定共享文件的数据类型,客户端应用会调用
ContentResolver.getType()
。此方法会返回
文件的 MIME 类型。默认情况下,
FileProvider
会根据
文件扩展名。
以下代码段演示了客户端应用如何检索文件的 MIME 类型一次 服务器应用已将内容 URI 返回给客户端:
Kotlin
... /* * Get the file's content URI from the incoming Intent, then * get the file's MIME type */ val mimeType: String? = returnIntent.data?.let { returnUri -> contentResolver.getType(returnUri) } ...
Java
... /* * Get the file's content URI from the incoming Intent, then * get the file's MIME type */ Uri returnUri = returnIntent.getData(); String mimeType = getContentResolver().getType(returnUri); ...
检索文件的名称和大小
FileProvider
类具有
query()
方法,该方法会返回
与内容 URI 中关联的文件的名称和大小
Cursor
。默认实现返回两列:
DISPLAY_NAME
-
文件名,格式为
String
。此值与返回的值相同 上传者:File.getName()
。 SIZE
-
文件大小(以字节为单位),格式为
long
。此值与 由File.length()
退回
客户端应用可以通过设置所有值来获取文件的 DISPLAY_NAME
和 SIZE
将 query()
的参数设置为
null
(内容 URI 除外)。例如,以下代码段用于检索文件的
DISPLAY_NAME
和
SIZE
,并分别显示
TextView
:
Kotlin
/* * Get the file's content URI from the incoming Intent, * then query the server app to get the file's display name * and size. */ returnIntent.data?.let { returnUri -> contentResolver.query(returnUri, null, null, null, null) }?.use { cursor -> /* * Get the column indexes of the data in the Cursor, * move to the first row in the Cursor, get the data, * and display it. */ val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) cursor.moveToFirst() findViewById<TextView>(R.id.filename_text).text = cursor.getString(nameIndex) findViewById<TextView>(R.id.filesize_text).text = cursor.getLong(sizeIndex).toString() ... }
Java
... /* * Get the file's content URI from the incoming Intent, * then query the server app to get the file's display name * and size. */ Uri returnUri = returnIntent.getData(); Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null); /* * Get the column indexes of the data in the Cursor, * move to the first row in the Cursor, get the data, * and display it. */ int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); returnCursor.moveToFirst(); TextView nameView = (TextView) findViewById(R.id.filename_text); TextView sizeView = (TextView) findViewById(R.id.filesize_text); nameView.setText(returnCursor.getString(nameIndex)); sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex))); ...
要了解更多相关信息,请参阅: