我想使用share命令从Gallery获取图像。
我目前的代码是:
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
Log.d("Test","Simple SEND");
Uri imageUri = (Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
InputStream iStream = getContentResolver().openInputStream(imageUri);
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
Log.d("Test", "Multiple SEND");
}
imageUri的值是:content:// media / external / images / media / 37
但是函数“openInputStream”会抛出错误“java.io.FileNotFoundException”。
通过以下功能,我可以获得图像的真实路径。
public static String getRealPathFromUri(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
但我不知道如何将其转换为位图。
答案 0 :(得分:0)
Uri
不是File
。 new File(imageUri.toString())
总是错的。 imageUri.getPath()
仅在Uri
的方案为file
时有效,而在您的情况下,该方案可能为content
。
使用ContentResolver
和openInputStream()
获取InputStream
标识的文件或内容Uri
。然后,将该流传递给BitmapFactory.decodeStream()
。
另外,请在后台线程上解码位图,以便在此工作进行时不冻结UI。