安卓开发中通过图片的绝对路径找到图片的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删除图片可以删除媒体库的信息和缩略图一并删除,不留痕迹,如果直接通过路径删除文件会删除不干净


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值