イメージピックのリクエストを開始しています:
Intent intent = new Intent();
intent.setType( "image/*" );
intent.setAction( Intent.ACTION_GET_CONTENT );
startActivityForResult( Intent.createChooser( intent, "Choose"), PHOTO_GALLERY );
そして、データを元に戻すonActivityResult
:
if( resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY )
{
U.log( data.getData() );
Bitmap bm = ... // built from the getData() Uri
this.postImagePreview.setImageBitmap( bm );
}
インテントを起動すると、、、、などのフォルダが表示さ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 );
彼らはまだ間違ったイメージを設定しています。ギャラリーに入ると、画像を長押しして、取得した詳細を表示します。
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
そのため、ギャラリーは、パスがピック アクションと同じであると伝えており、ギャラリーはそれを正しくレンダリングしています。では、onActivityResult から設定すると、一体なぜレンダリングされないのでしょうか。
また、これは私が今インテントを起動するために使用しているコードです:
private void selectPhoto()
{
Intent intent = new Intent( Intent.ACTION_GET_CONTENT );
intent.setType( "image/*" );
( ( Activity )mContext ).startActivityForResult( Intent.createChooser( intent, "Select Picture" ), PHOTO_GALLERY );
}