2012-02-04 4 views
0

Я пытаюсь использовать встроенную галерею Android. Я могу получить галерею и альбомы, но всякий раз, когда я хочу отображать изображение, галерея сразу направляет меня обратно в мое приложение. Я не могу просмотреть изображение, несмотря на то, что он был вызван.Android - изображение не отображается из встроенной галереи

Это мой код:

public class CameraTab extends Activity implements OnClickListener{ 
private static final int SELECT_PICTURE = 1; 

private String selectedImagePath; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.camera_tab); 

    ImageButton cameraBtn = (ImageButton)findViewById(R.id.camera_btn); 
    cameraBtn.setOnClickListener(this); 

    ImageButton galleryBtn = (ImageButton)findViewById(R.id.gallery_btn); 
    galleryBtn.setOnClickListener(this); 

} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 

    if (v == this.findViewById(R.id.camera_btn)){ 
    /// some codes here 
    } 

    if (v == this.findViewById(R.id.gallery_btn)){ 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, 
       "Select Picture"), SELECT_PICTURE); 
    } 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri);   
     } 
    } 
} 

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); 
} 

}

Может кто-нибудь, пожалуйста, помогите мне? Любая помощь будет оценена! Благодаря!!

ответ

0

Проблема заключается в недоразумении Intent.ACTION_GET_CONTENT намерений. Он намерен использовать . Выберите содержимое (в данном случае изображение/*) из архива.

Если вы хотите показать изображение, просто создайте новое действие с помощью ImageView в его макете. Передайте URI изображения, используя setData.

0

Я думаю, что действие, которое вы хотите использовать, - Intent.ACTION_VIEW. попробовать это

final Intent intent = new Intent(Intent.ACTION_VIEW); 
final Uri uri = <The URI to your file>; 
// Uri either from file eg. 
final Uri uri = Uri.fromFile(yourImageFileOnSDCard); 
// or from media store like your method getPath() does but with the URI 
// from http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html#EXTERNAL_CONTENT_URI 
intent.setDataAndType(uri, "image/*"); 
startActivity(intent); 

Строка "image/* тип MIME для использования.

Теперь галерея открывается с выбранным изображением. Для того, чтобы вернуться к вашему приложению пользователь должен нажать кнопку назад, как обычно;)

0
private Context context; 

public void onCreate(Bundle savedInstanceState) { 
... 
context = this; 
} 

Я использовал уменьшенную Bitmap ниже, потому что на некоторых устройствах изображения в галерее может оказаться слишком большим для отображаемого на ImageView (Раньше у меня была эта проблема).

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (resultCode == RESULT_OK) { 
    if (requestCode == SELECT_PICTURE) { 
     Uri selectedImageUri = data.getData(); 
     selectedImagePath = getPath(selectedImageUri); 

     Bitmap b = new BitmapDrawable(context.getResources(), 
       selectedImagePath).getBitmap(); 
     int i = (int) (b.getHeight() * (512.0/b.getWidth())); 
     bitmap = Bitmap.createScaledBitmap(b, 512, i, true); 

     // To display the image, you need to set it to an ImageView here 
     ImageView img = (ImageView) findViewById(R.id.myImageView); 
     img.setImageBitmap(bitmap); 
     } 
    } 
} 
Смежные вопросы