0

我目前正在努力解决一个我希望你帮我解决的问题......基本上我正在尝试以这种方式从手机的内部图库中获取一些图像

意图意图 = new Intent();

intent.setType("图片/*");

意图.setAction(意图.ACTION_GET_CONTENT);

startActivityForResult(Intent.createChooser(intent, "选择图片"),SELECT_IMAGE);

但是当我使用这个在 onActivityResult 方法中获取 Uri 时

URI images_uri = data.getData();

数据为空(从 SD 卡中获取图像时不会发生这种情况)

我该如何解决?

此外,作为次要问题,我怎样才能获得超过 1 张图像?我读过有关使用 ACTION_SEND_MULTIPLE 的信息,但这打开了发送方法的选择,而不是从哪里获取图像的地方......

先感谢您

4

2 回答 2

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);
}
于 2012-04-26T10:57:25.960 回答
0

好吧,在我的情况下,它实际上是一个错误的缓存列表(画廊显示的照片实际上并不存在,所以如果我选择它们,实际的 URI 原来是 nil)。

在调用 ACTION_GET_CONTENT 意图之前,我建议添加以下命令:

 sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

这将告诉画廊它应该刷新其数据。如果你这样做,小心在你的线程中放置一个短暂的睡眠(例如:

  Thread.sleep(1000);

)。这应该允许刷新操作在实际打开之前完成。至少在我的手机上,这阻止了 Gallery 应用程序的短暂闪烁。

于 2012-09-09T01:45:40.617 回答