android 获取文件信息,Android最佳实践之获取文件信息

本课程教你:

获取文件的MIME类型

获取文件的名字和大小

在一个客户端应用尝试使用content URI读写文件之前,这个应用可以从服务端应用获取关于这个文件的信息,包括文件的数据类型和大小。文件类型帮助客户端应用判断它是否能处理这个文件;文件的大小帮助客户端应用对这个文件设置缓冲和缓存。

本课程展示了如何向服务端应用的 FileProvider 获取它的文件的MIME类型和大小。

获取文件的MIME类型

一个文件的数据类型会指导客户端应用该怎么处理这个文件的内容。为了获取content URI代表的文件的数据类型,客户端应用调用 ContentResolver.getType()。这个方法返回文件的MIME类型。默认情况下,一个 FileProvider 根据这个文件的扩展名决定这个文件的MIME类型。

下面这段代码展示了一个客户端应用如何从服务端应用返回的content URI中获取文件的MIME类型:

...

/*

* 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()](https://developer.android.com/reference/android/support/v4/content/FileProvider.html#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)) 方法在 Cursor 中默认返回与content URI对应的文件的名字和大小。默认实现方法有两栏:

long形式返回。这个值与 File.length() 返回的值保持一致。

客户端应用通过在 [query()](https://developer.android.com/reference/android/support/v4/content/FileProvider.html#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)) 中设置除了content URI之外的其他值为null,能够获取到文件的 DISPLAY_NAME 和 SIZE。例如,下面这段代码获取了文件的 DISPLAY_NAME

和 SIZE,然后将它们分别显示在 TextView 中:

...

/*

* 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)));

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值