首页 > 解决方案 > 从 MediaStore.Images 获取 Uri

问题描述

基本上我想要做的是,遍历我手机中的所有图像文件,并使用 MLKit 对它们进行 OCR。我正在使用 MediaStore 来迭代图像。这是我的代码:

public void onClick(View v){
            String[] projection = new String[] {
                    MediaStore.Images.Media._ID,
                    MediaStore.Images.Media.DISPLAY_NAME,
                    MediaStore.Images.Media.DATA
            };

            Cursor cursor = getApplicationContext().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.Media.DISPLAY_NAME+" ASC");
            //cursor.moveToNext();
            while(cursor.moveToNext()){
                Uri imageUri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)));
                //Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,String.valueOf(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID))));
                final TextView yotext = findViewById(R.id.sample);
                yotext.setText(imageUri.toString());
                ImageView ima = (ImageView) findViewById(R.id.sampleImage);
                ima.setImageURI(Uri.parse(imageUri));

                //InputImage image = InputImage.fromFilePath(getApplicationContext(),imageUri);
                try {
                    InputImage image = InputImage.fromFilePath(v.getContext(), imageUri);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
}
}

我已经尝试Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)))Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,String.valueOf(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID))))获得 imageUri 并且这两种方法都给了我不同的 Uris。我无法显示这两种方法提供的图像并ima.setImageURI(Uri.parse(imageUri))出现以下错误

2020-07-05 05:14:38.020 27990-27990/com.example.deletex E/Drawable: Unable to decode stream: android.graphics.ImageDecoder$DecodeException: Failed to create image decoder with message 'unimplemented'Input contained an error.
2020-07-05 05:14:38.021 27990-27990/com.example.deletex W/ImageView: resolveUri failed on bad bitmap uri: /storage/emulated/0/Pictures/Boost/File:ISS-32_American_EVA_b3_Aki_Hoshide.jpg

返回的 UriUri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)))/storage/emulated/0/Pictures/Boost/File:ISS-32_American_EVA_b3_Aki_Hoshide.jpg

并且返回的 Uri Uri imageUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,String.valueOf(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID))));content://media/external/images/media/200560

标签: javaandroidandroid-studiomediastore

解决方案


推荐阅读