Verwenden von CursorLoader mit LoaderManager zum Abrufen von Bildern aus Android-Apps
Im Moment verwende ich getContentResolver (). Query () / managedQuery (), um einen Cursor zum Abrufen von Bildern aus der Galerie-App zu erhalten. Da die von mir verwendeten APIs teilweise veraltet sind, wollte ich CursorLoader mit LoaderManager verwenden.
/**
* 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;
}
Da ich keine ListView habe, verwende ich keinen Adapter. Ich habe gerade eine Bild-Bitmap für eine ImageView festgelegt.
/**
* 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;
}
Ist es möglich, CursorLoader mit LoaderManager zu verwenden, um Bilder aus der Galerie-App oder einem Dateimanager zu laden? Ich kann keine Lösung finden.