當需要時通過調用getSupportLoaderManager啓動加載器管理器。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
imageUri = data.getData();
getSupportLoaderManager().initLoader(0, null, this);
} else if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(this, "Action canceled.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "Action failed!", Toast.LENGTH_LONG).show();
}
}
}
然後創建一個用於檢索圖像路徑的光標加載器。
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = {
MediaStore.Images.Media.DATA
};
CursorLoader cursorLoader = new CursorLoader(this, imageUri, projection, null, null, null);
return cursorLoader;
}
當遊標加載器結束時,它使用檢索到的數據更新UI。
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data != null) {
int columnIndex = data.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
data.moveToFirst();
imagePath = data.getString(columnIndex);
} else {
imagePath = imageUri.getPath();
}
setupImageView();
}
檢查這個答案。 http://stackoverflow.com/questions/14424624/using-cursorloader-with-loadermanager-to-retrieve-images-from-android-apps –
請記住,沒有要求'MediaStore'給你一個路徑文件,您可以使用。畢竟,該文件可能位於[可移動存儲](https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)上,您無法在Android 4.4及更高版本上訪問該文件。 – CommonsWare