Android - 图像选择器,错误的图像

Jos*_*osh 14 media android action android-intent

我正在开始请求图片选择:

Intent intent = new Intent();
intent.setType( "image/*" );
intent.setAction( Intent.ACTION_GET_CONTENT );
startActivityForResult( Intent.createChooser( intent, "Choose"), PHOTO_GALLERY );
Run Code Online (Sandbox Code Playgroud)

并将数据退回onActivityResult:

if( resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY )
{
  U.log( data.getData() );
  Bitmap bm = ... // built from the getData() Uri
  this.postImagePreview.setImageBitmap( bm );
}
Run Code Online (Sandbox Code Playgroud)

当我启动的意图,我看到一些文件夹,如sdcard,Drop Box,MyCameraApp,等.

如果我选择了一张图片sdcard,当我加载预览时,它是完全错误的图像.其他文件夹似乎没有给我这个问题.

有谁知道为什么它让我选择一个图像,然后给我另一个Uri?

编辑:这是一些示例记录getData()s:

好:

content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210

坏:

content://media/external/images/media/28

编辑:从图库的sdcard文件夹中选择时,我仍然遇到问题.

这是我在onActivityResult中所做的更多扩展:

// cursor
Uri selectedImage = data.getData();

String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = mContext.getContentResolver().query( selectedImage, filePathColumn, null, null, null );
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex( filePathColumn[0] );
String filePath = cursor.getString( columnIndex );
cursor.close();

// Cursor: /mnt/sdcard/Pic.jpg : /mnt/sdcard/Pic.jpg
U.log( "Cursor: " + filePath + " : " + Uri.parse( filePath ) );

// "regular" 

// Regular: content://media/external/images/media/28 : content://media/external/images/media/28
U.log( "Regular: " + data.getDataString() + " : " + Uri.parse( data.getDataString() ) );

// Regular 2: content://media/external/images/media/28 : content://media/external/images/media/28
U.log( "Regular 2: " + data.getData() + " : " + data.getData() );


mPostImagePreview.setImageBitmap( BitmapFactory.decodeFile( filePath ) );
mPostImagePreview.setVisibility( View.VISIBLE );
Run Code Online (Sandbox Code Playgroud)

他们仍然设置错误的形象.如果我进入图库,请长按图像,然后查看其获得的详细信息:

TItle: Pic
Time: May 2, 2012
Width: 720
Height: 1280
Orientation: 0
File size: 757KB
Maker: Abso Camera
Model: Inspire 4G
Path: /mnt/sdcard/Pic.jpg
Run Code Online (Sandbox Code Playgroud)

因此,图库告诉我路径与拾取操作相同,并且图库正确渲染它.那么,如果我从onActivityResult设置它,它为什么不渲染呢?

此外,这是我现在用来触发Intent的代码:

private void selectPhoto()
{
  Intent intent = new Intent( Intent.ACTION_GET_CONTENT );
  intent.setType( "image/*" );
  ( ( Activity )mContext ).startActivityForResult( Intent.createChooser( intent, "Select Picture" ), PHOTO_GALLERY );
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*wal 5

这是打开图库的代码.然而,这与你所做的一样.另请参阅onActivityResult我用于检索所选图像的代码.

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),  
                       PHOTO_GALLERY);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
    case PHOTO_GALLERY:
        if (resultCode == RESULT_OK) {
            Uri selectedImageUri = Uri.parse(data.getDataString());
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(  
                                   getApplicationContext().getContentResolver(),   
                                   selectedImageUri);

                this.postImagePreview.setImageBitmap( bitmap);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


uwe*_*uwe 5

有时,图库应用程序中的缩略图可能会过时并显示不同图像的缩略图。当图像 id 被重用时会发生这种情况,例如当一个图像被删除并使用相同的 id 添加一个新图像时。

Manage Apps > Gallery > Clear Data 可以解决这个问题。