Image的Cursor始终返回null

时间:2013-05-07 07:51:05

标签: android uri android-cursor mediastore

我正在存储相机中的照片:

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());
}

其他日志会返回content:///storage/emulated/0/com.korcholis.testapp/pictures/1aaf2e587kg519cejk88ch6hle372.png,这是正常的,但光标位于null cursor.moveToFirst()。看起来光标无法找到图像。但是,通过文件管理器进入存储时,可以在正确的文件夹中轻松找到该图像。我还检查过使用file://时文件确实存在,而且确实存在。我做错了什么?

编辑5/8/2013: 我一直在寻找解决方案,但这看起来不可能。我已经在其他帖子中读到file://使用getContentResolver()找不到足够好的Uri,所以我尝试使用content://。尽管我付出了努力,但这并没有达到预期的效果。我编辑了我正在使用的当前代码的最后一个代码块。我甚至尝试将其添加到图库中,因此它可以算作“已解析内容列表”中的项目。

1 个答案:

答案 0 :(得分: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 
}