当前位置: 首页 > >

安卓开发中通过图片的绝对路径找到图片的URI

发布时间:

安卓开发中通过图片的绝对路径找到图片的URI


android 4.1.3的系统上都是可用的


第一种:


将所有的图片路径取出,遍历比较找到需要的路径,取出URI,效率较低


其中 MediaStore.MediaColumns.DATA 字段存的就是图片的绝对路径


Uri mUri = Uri.parse("content://media/external/images/media");
Uri mImageUri = null;
Cursor cursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Images.Media.DEFAULT_SORT_ORDER);
cursor.moveToFirst();

while (!cursor.isAfterLast()) {
String data = cursor.getString(cursor
.getColumnIndex(MediaStore.MediaColumns.DATA));
if (picPath.equals(data)) {
int ringtoneID = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID));
mImageUri = Uri.withAppendedPath(mUri, "" + ringtoneID);
break;
}
cursor.moveToNext();
}



第二种:


直接从媒体数据库根据字段取出相应的记录,效率高,推荐



String type = Utils.ensureNotNull(intent.getType());
Log.d(TAG, "uri is " + uri);
if (uri.getScheme().equals("file") && (type.contains("image/"))) {
String path = uri.getEncodedPath();
Log.d(TAG, "path1 is " + path);
if (path != null) {
path = Uri.decode(path);
Log.d(TAG, "path2 is " + path);
ContentResolver cr = this.getContentResolver();
StringBuffer buff = new StringBuffer();
buff.append("(").append(Images.ImageColumns.DATA).append("=")
.append(" + path + ").append(")");
Cursor cur = cr.query(Images.Media.EXTERNAL_CONTENT_URI,
new String[] { Images.ImageColumns._ID },
buff.toString(), null, null);
int index = 0;
for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) {
index = cur.getColumnIndex(Images.ImageColumns._ID);
// set _id value
index = cur.getInt(index);
}
if (index == 0) {
// do nothing
} else {
Uri uri_temp = Uri
.parse("content://media/external/images/media/"
+ index);
Log.d(TAG, "uri_temp is " + uri_temp);
if (uri_temp != null) {
uri = uri_temp;
}
}
}
}



第三种:


删除图片


直接根据路径通过 ContentProvider 的 delete() 方法删除图片,代码短,效率高



String params[] = new String[]{filepath};
ctx.getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media.DATA + " LIKE ?", params);
通过URI删除图片可以删除媒体库的信息和缩略图一并删除,不留痕迹,如果直接通过路径删除文件会删除不干净






友情链接: