Android获取图片的路径方法总结

android系统通过图片绝对路径获取URI的两种方法。


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

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

最后mImageUri得到的就是图片的URI

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();
 }

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

                 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;
                             }
                         }
                     }
                 }
Android中,获取图片的真实路径通常发生在用户选择图片后,通过Activity的`ACTION_GET_CONTENT`或者`ACTION_PICK_MEDIA`等意图来选择图片。以下是一般的步骤: 1. **启动相机或相册选择器**: 使用`Intent`启动相机或相册应用程序,让用户选择图片,例如: ```java Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, SELECT_PICTURE_REQUEST_CODE); ``` 2. **处理 onActivityResult**: 当用户选择图片后,会回调`onActivityResult`方法,你可以从这里获取图片路径: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SELECT_PICTURE_REQUEST_CODE && resultCode == RESULT_OK) { Uri selectedImage = data.getData(); String imagePath = getPath(selectedImage); // 这里使用getPath()函数尝试获取图片的文件路径 } } private String getPath(Uri uri) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, proj, null, null, null); if (cursor != null) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } else { return null; } } ``` 3. **注意文件权限和生命周期**: 获取到的路径可能是在应用内部存储或者外部存储,确保你的应用具有读取对应位置的权限,并在需要的时候妥善处理文件的关闭和清理,因为某些情况下,如设备重启,这些路径可能会失效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值