我目前正在努力解决一个问题,我希望你帮我解决......基本上我是想通过这种方式从手机的内部图库中获取一些图像
Intent intent = new Intent();
intent.setType( “图像/ *”);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,“Select Picture”),SELECT_IMAGE);
但是当我使用此
获取onActivityResult方法中的Uri时Uri images_uri = data.getData();
数据为空(当从SD卡中取出图像时不会发生这种情况)
我怎么解决?
此外,作为次要问题,如何获得超过1张图像?我阅读了有关使用ACTION_SEND_MULTIPLE的信息,但是这会打开一个选择来发送方法,而不是从哪里获取图片...
提前谢谢
答案 0 :(得分:0)
试试这个
public static final int GALLERY_CODE = 322;
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
GALLERY_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Assinging on corresponding import
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GALLERY_CODE && resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
try {
//add logic for coping file
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
答案 1 :(得分:0)
嗯,在我的情况下,它实际上是一个错误的缓存列表(图库显示的实际上并不存在照片,所以如果我选择它们,实际的URI结果为零)。
在调用ACTION_GET_CONTENT意图之前,我建议添加以下命令:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
会告诉Gallery它应该刷新它的数据。如果你这样做,小心在你的线程中短暂睡眠(例如:
Thread.sleep(1000);
)。这应该允许刷新操作在实际打开之前完成。在我的手机上,至少,这阻止了Gallery应用程序的短暂闪现。