java uri 转路径_从真正的路径获取Uri

在文件路径中转换“file:// ...”,使用以下代码查找项目的ID,然后将其附加到提供者URI . 此外,基于文件扩展名,使用正确的提供程序(例如MediaStore.Video.Media.EXTERNAL_CONTENT_URI或MediaStore.Image.Media.EXTERNAL_CONTENT_URI)

/**

* Given a media filename, returns it's id in the media content provider

*

* @param providerUri

* @param appContext

* @param fileName

* @return

*/

public long getMediaItemIdFromProvider(Uri providerUri, Context appContext, String fileName) {

//find id of the media provider item based on filename

String[] projection = { MediaColumns._ID, MediaColumns.DATA };

Cursor cursor = appContext.getContentResolver().query(

providerUri, projection,

MediaColumns.DATA + "=?", new String[] { fileName },

null);

if (null == cursor) {

Log.d(TAG_LOG, "Null cursor for file " + fileName);

return ITEMID_NOT_FOUND;

}

long id = ITEMID_NOT_FOUND;

if (cursor.getCount() > 0) {

cursor.moveToFirst();

id = cursor.getLong(cursor.getColumnIndexOrThrow(BaseColumns._ID));

}

cursor.close();

return id;

}

有时,在将一个媒体文件添加到设备的存储中后,MediaProvider不会立即刷新 . 您可以使用此方法强制刷新其记录:

/**

* Force a refresh of media content provider for specific item

*

* @param fileName

*/

private void refreshMediaProvider(Context appContext, String fileName) {

MediaScannerConnection scanner = null;

try {

scanner = new MediaScannerConnection(appContext, null);

scanner.connect();

try {

Thread.sleep(200);

} catch (Exception e) {

}

if (scanner.isConnected()) {

Log.d(TAG_LOG, "Requesting scan for file " + fileName);

scanner.scanFile(fileName, null);

}

} catch (Exception e) {

Log.e(TAG_LOG, "Cannot to scan file", e);

} finally {

if (scanner != null) {

scanner.disconnect();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值