Este es el código que utilizo para seleccionar una imagen de la tarjeta SD
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),JobActivity.SELECT_PHOTO);
Nota esto carga la carpeta raíz.
Una vez que se selecciona una fotografía, se llama al método onActivityResult y se puede obtener la imagen.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
if (resultCode == RESULT_OK) {
if (requestCode == JobActivity.SELECT_PHOTO) {
Uri selectedImageUri = data.getData();
String selectedImagePath = getPath(selectedImageUri);
getBitmap(selectedImagePath, 0);
// Log.d("Debug","Saved...." + selectedImagePath);
}
}
} catch (Exception e) {
Log.e("Error", "Unable to set thumbnail", e);
}
}
El método get Ruta
public String getPath(Uri uri) {
Cursor cursor = null;
int column_index = 0;
try {
String[] projection = { MediaStore.Images.Media.DATA };
cursor = managedQuery(uri, projection, null, null, null);
column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
} catch (Exception e) {
Log.d("Error", "Exception Occured", e);
}
return cursor.getString(column_index);
}
Y por último para obtener el mapa de bits
public Bitmap getBitmap(String path, int size) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = size;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
return bitmap;
}
La variable tamaño permite el escalado de la imagen por un factor. Si no desea escalar, simplemente elimine el parámetro de opciones.
No estoy seguro de cómo elegir entre otra carpeta que no sea la raíz.
Aquí es una entrada útil también Get/pick an image from Android's built-in Gallery app programmatically
¿Recibió la respuesta ?, si es así por favor comparta .. – PiyushMishra