Acceda a imágenes desde la aplicación de Imágenes en mi aplicación de Android

Al igual que el iPhone tiene un UIImagePickerController para permitir que el usuario acceda a las imágenes almacenadas en el dispositivo, ¿tenemos un control similar en el SDK de Android?

Gracias.

Puede usar startActivityForResult , pasando Intent que describe una acción que desea completar y la fuente de datos para realizar la acción.

Afortunadamente para ti, Android incluye una acción para elegir cosas: Intent.ACTION__PICK y una fuente de datos que contiene imágenes: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI para imágenes en el dispositivo local o android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI para imágenes en la tarjeta SD.

Llame a startActivityForResult pasando la acción de selección y las imágenes que desea que el usuario seleccione de esta manera:

 startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE); 

A continuación, anule onActivityResult para escuchar que el usuario haya hecho una selección.

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_IMAGE) if (resultCode == Activity.RESULT_OK) { Uri selectedImage = data.getData(); // TODO Do something with the select image URI } } 

Una vez que tenga la imagen de Uri, puede usarla para acceder a la imagen y hacer lo que tenga que hacer con ella.

También puedes hacer:

 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); startActivityForResult(photoPickerIntent, 1); 

Esto seleccionará imágenes en todos los almacenes.

Solo una actualización de la respuesta dada por Reto. Puedes hacer esto para escalar la imagen:

 private String getPath(Uri uri) { String[] data = { MediaStore.Images.Media.DATA }; CursorLoader loader = new CursorLoader(context, uri, data, null, null, null); Cursor cursor = loader.loadInBackground(); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }