Usando o CursorLoader com o LoaderManager para recuperar imagens de aplicativos do Android
No momento, estou usando getContentResolver (). Query () / managedQuery () para obter um cursor para recuperar imagens do aplicativo de galeria. Como as APIs que estou usando são parcialmente obsoletas, eu queria usar o CursorLoader com o LoaderManager.
/**
* Creates a cursor to access the content defined by the image uri for API
* version 11 and newer.
*
* @return The created cursor.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private Cursor createCursorHoneycomb() {
String[] projection = {
MediaStore.Images.Media.DATA
};
Cursor cursor = getContentResolver().query(imageUri, projection, null, null, null);
return cursor;
}
/**
* Creates a cursor to access the content defined by the image uri from API
* version 8 to 10.
*
* @return The created cursor.
*/
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.FROYO)
private Cursor createCursorFroyo() {
String[] projection = {
MediaStore.Images.Media.DATA
};
Cursor cursor = managedQuery(imageUri, projection, null, null, null);
return cursor;
}
Como não tenho um ListView, não uso nenhum adaptador. Acabei de definir um bitmap de imagem para um ImageView.
/**
* Sets the image bitmap for the image view.
*/
private void setupImageView() {
String imagePath = getImagePathFromUri(imageUri);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
ImageView imageView = (ImageView) findViewById(R.id.image_view);
imageView.setImageBitmap(bitmap);
}
/**
* Returns an image path created from the supplied image uri.
*
* @param imageUri The supplied image uri.
* @return Returns the created image path.
*/
@SuppressWarnings("deprecation")
private String getImagePathFromUri(Uri imageUri) {
Cursor cursor = null;
String imagePath = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
cursor = createCursorHoneycomb();
} else {
cursor = createCursorFroyo();
}
// if image is loaded from gallery
if (cursor != null) {
startManagingCursor(cursor);
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
imagePath = cursor.getString(columnIndex);
}
// if image is loaded from file manager
else {
imagePath = imageUri.getPath();
}
return imagePath;
}
É possível usar o CursorLoader com o LoaderManager para carregar imagens do aplicativo da galeria ou de um gerenciador de arquivos? Não consigo encontrar nenhuma solução.