客户端应用在尝试处理其具有内容 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))); ...
要了解更多相关信息,请参阅: