2009-02-15 11 views
41

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?Acceda a las imágenes de la aplicación Imágenes en mi aplicación Android

Gracias.

+1

Creo que lo que está buscando es un proveedor de contenido llamado android.provider y una clase llamada MediaStore.Images [Más información se puede encontrar aquí.] (Http://developer.android.com/reference/android/provider/package-summary.html) – GregD

Respuesta

83

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

Por suerte para usted, Android, incluye una acción para las cosas de la cosecha: Intent.ACTION__PICK y una fuente de datos que contienen las imágenes: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI para las imágenes en el dispositivo local o android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI de imágenes en la tarjeta SD.

llamada startActivityForResult que pasa en la accion de captura y las imágenes que desea que el usuario seleccione de la siguiente manera:

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

Entonces anulan onActivityResult a escuchar para el usuario después de haber realizado 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 Uri, puede usarla para acceder a la imagen y hacer lo que tenga que hacer con ella.

+0

Mi onactivityresulta no ser llamado cuando se usa ... ¿alguna sugerencia? Establecí el permiso de almacenamiento externo –

+0

Para ver exactamente cómo recuperar la ruta del archivo desde la variable de imagen seleccionada, consulte esta respuesta: http://stackoverflow.com/a/10474167 – Tiago

22

También puede hacer:

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

Este recogerá imágenes a través de todos los almacenes.

+0

¿Es posible hacer que la cámara aparezca como una fuente adicional? ¿aquí? – jjxtra

+0

si pasa el static 1 al startActivityForResult, ¿cómo identifica el código de solicitud dentro de onActivityResult()? –

1

Solo una actualización de la respuesta dada por Reto. Usted puede hacer esto a escala de 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); 
} 
Cuestiones relacionadas