java - 从 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