Курсор для изображения всегда возвращает ноль

Я сохраняю изображение с моей камеры следующим образом:

String newName = new BigInteger(130, new SecureRandom())
                    .toString(24);
File mydir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),
                    CameraActivity.DIR_PICTURES);
mydir.mkdirs();
fileWithinMyDir = new File(mydir, newName + ".png");
out = new FileOutputStream(fileWithinMyDir);
finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

где CameraActivity.DIR_PICTURES означает "com.korcholis.testapp/pictures". Ничего особенного, на мой взгляд. Проблема возникает, когда я пытаюсь получить некоторую информацию об этом изображении. Где-то еще в моем коде:

Uri selectedImage = Uri.fromFile(new File(sample.getPicture()));
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(selectedImage);
getSherlockActivity().sendBroadcast(mediaScanIntent); //Now it's in the Gallery
selectedImage = Uri.parse("content://"+(new File(sample.getPicture()).toString()));
String[] filePathColumn = {MediaStore.Images.ImageColumns.ORIENTATION};
Cursor cursor = getSherlockActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if(cursor != null)
{
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    Log.i("ImageTest", cursor.getString(columnIndex));
    cursor.close();
}
else
{
    Log.i("ImageTest", selectedImage .toString());
}

Журнал else возвращает content:///storage/emulated/0/com.korcholis.testapp/pictures/1aaf2e587kg519cejk88ch6hle372.png, что нормально, но курсор null стоит на cursor.moveToFirst(). Похоже, курсор не может найти изображение. Однако при попадании в Хранилище через файловый менеджер образ легко находится в нужной папке. Я также проверил, что файл действительно существует при использовании file://, и это действительно так. Что я делаю не так?

РЕДАКТИРОВАТЬ 08.05.2013: Я продолжал искать решение, однако это выглядит невозможным. Я читал в других темах, что file:// не является достаточно хорошим Uri для поиска с использованием getContentResolver(), поэтому вместо этого я попытался использовать content://. Это, несмотря на мои усилия, идет не так хорошо, как ожидалось. Я отредактировал последний кодовый блок в соответствии с текущим кодом, который я использую. Я даже пытался добавить его в галерею, чтобы он мог считаться элементом в «списке разрешенного контента».


person Sergi Juanola    schedule 07.05.2013    source источник
comment
вы говорите, что проблема возникает, когда вам нужна информация о файле. Я понимаю, что вы хотите что-то об изображении где-то еще в коде. что именно вам нужно в этот момент?   -  person Aditya Kushwaha    schedule 13.05.2013
comment
Я хочу получить MediaStore.Images.Media.ORIENTATION для вашего ответа здесь . Только то. Я также могу захватить изображение и установить его как рисуемое в ImageView, поэтому изображение существует.   -  person Sergi Juanola    schedule 13.05.2013


Ответы (1)


Вместо использования курсора, поскольку вам нужно только найти ориентацию одного изображения, вы можете сделать это:

ExifInterface exif = new ExifInterface(selectedImage);
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
if(orientation == 3 || orientation == 6 || orientation == 8 ){ 
   Matrix matrix = new Matrix(); 
   if (orientation == 6)
      matrix.postRotate(90); 
   else if (orientation == 3)
      matrix.postRotate(180);  
   else if (orientation == 8)
      matrix.postRotate(270);
   result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true); // rotating bitmap 
}
person Aditya Kushwaha    schedule 13.05.2013
comment
привет @kushwaha Мне нужно найти ориентацию изображения, и использование ExifInterface всегда возвращает мне 0. Не могли бы вы помочь мне, почему оно всегда возвращает ноль. - person Dory; 22.07.2013
comment
Этот метод работает только в том случае, если приложение камеры сохраняет изображение с данными exif, что в настоящее время довольно редко. Если EXIF ​​отсутствует, возвращается null. - person phil_g; 09.12.2013