android新版本 gallery中获得的 Intent.ACTION_GET_CONTENT 值结果不一致

文章标签: android
2014-12-29 11:53:56     人阅读    


我在之前的版本通过如下的代码获得sd卡的真实路径

public String getPath(Uri uri) {
   String[] projection = { MediaStore.Images.Media.DATA };
   Cursor cursor = managedQuery(uri, projection, null, null, null);
   startManagingCursor(cursor);
   int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
   cursor.moveToFirst();
 return cursor.getString(column_index);
}


升级到新版本 gallery 后Intent.ACTION_GET_CONTENT 返回的结果不一致

之前获得的结果:
content://media/external/images/media/62
最新版本获得结果
content://com.android.providers.media.documents/document/image:62

如何才能获得具体的路径:

处理方法

您可以使用URI来获取文档ID,然后查询

MediaStore.Images.Media.EXTERNAL_CONTENT_URI 或者
MediaStore.Images.Media.INTERNAL_CONTENT_URI (依赖SD卡具体情况).
获得文档的ID
// 会返回 "image:x*"
String wholeID = DocumentsContract.getDocumentId(uriThatYouCurrentlyHave);
// 分割成数组,然后使用第二个位置的内容
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to             
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,column, sel, new String[]{ id },null);
String filePath = "";
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
    filePath = cursor.getString(columnIndex);
}
cursor.close();

 


原文地址:http://www.itmmd.com/201412/406.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android把头像位图处理成圆形   上一篇
下一篇  android ADT 无法创建 android Activity
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!