Я нашел решение. До того, как я обратился к MediaStore Content Resolver и получил миниатюры (не то, что мне было нужно). Эта оптимизация позволяет мне выполнять поиск MediaStore точно таким же образом, но на этот раз я ищу ФАКТИЧЕСКИЕ изображения и возвращаю миниатюру MICRO_KIND. Затем изображения кэшируются в массиве растровых изображений, а затем используются для заполнения GridView. Теперь я могу получить путь к реальному полноразмерному изображению на устройстве ... в случае, если мне нужно создать экземпляр URI или файл с использованием этого пути, теперь я могу это легко сделать. Если у вас есть такая же или похожая проблема, Android получает путь к изображению из эскиза? , вот код решения ниже. Кстати, я делаю это в AsyncTask и показываю / закрываю диалог загрузки после отображения всех изображений на устройстве.
/*----------------------------ASYNC TASK TO LOAD THE PHOTOS--------------------------------------------------------*/
public class LoadPhotos extends AsyncTask<Object, Object, Object>{
@Override
protected Object doInBackground(Object... params) {
final String[] columns = { MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
int image_column_index = imagecursor
.getColumnIndex(MediaStore.Images.Media._ID);
AllPhotosActivity.count = imagecursor.getCount();
AllPhotosActivity.windows = new Bitmap[AllPhotosActivity.count];
for (int i = 0; i < AllPhotosActivity.count; i++) {
imagecursor.moveToPosition(i);
//i = index;
int id = imagecursor.getInt(image_column_index);
windows[i] = MediaStore.Images.Thumbnails.getThumbnail(
getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null);
}
imagecursor.close();
return null;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pd.dismiss();
imagegrid.setAdapter(new ImageAdapter(getApplicationContext()));
}
@Override
protected void onProgressUpdate(Object... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
А вот и мой onItemClick ()
Элемент «filename» - это то, что вы будете использовать для создания экземпляров URI или всего, что вам нужно сделать с изображением.
public void onItemClick(AdapterView<?> arg0, android.view.View v,
int position, long id) {
String[] columns = { MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID };
Cursor actualimagecursor = managedQuery(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
null, null, null);
final int dataColumnIndex = actualimagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
final int idColumIndex = actualimagecursor
.getColumnIndex(MediaStore.Images.Media._ID);
actualimagecursor.moveToPosition(position);
filename = actualimagecursor.getString(dataColumnIndex);
final long imageId = actualimagecursor.getLong(idColumIndex);