从android相册获取所有图片的路径
2015-08-14 12:09
916 查看
在做从系统选择图片并获取到它们的路径时发现有些图片的uri.getScheme是“file”,有些图片的uri.getScheme是“content” 所有导致用uri.getPath并不能获取所有图片的路径,用如下代码解决:
@SuppressLint("NewApi")
public static String getPath(Activity activity, Uri uri) {
L.i("hui", "处理前的路径:" + uri);
if (null == uri) {
return null;
}
String path = null;
String scheme = uri.getScheme();
if (scheme == null) {
path = uri.getPath();
} else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
path = uri.getPath();
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
Cursor cursor = null;
if(VERSION.SDK_INT>=19&&DocumentsContract.isDocumentUri(activity, uri)){ //兼容andoid4.4版本
String wholeID = DocumentsContract.getDocumentId(uri);
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
String sel = MediaStore.Images.Media._ID + "=?";
cursor = activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column,
sel, new String[] { id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
path = cursor.getString(columnIndex);
}
cursor.close();
}else{
String[] projection = { MediaStore.Images.Media.DATA };
cursor = activity.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index);
}
if(cursor!=null&&!cursor.isClosed()){
cursor.close();
}
}
return path;
}
@SuppressLint("NewApi")
public static String getPath(Activity activity, Uri uri) {
L.i("hui", "处理前的路径:" + uri);
if (null == uri) {
return null;
}
String path = null;
String scheme = uri.getScheme();
if (scheme == null) {
path = uri.getPath();
} else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
path = uri.getPath();
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
Cursor cursor = null;
if(VERSION.SDK_INT>=19&&DocumentsContract.isDocumentUri(activity, uri)){ //兼容andoid4.4版本
String wholeID = DocumentsContract.getDocumentId(uri);
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
String sel = MediaStore.Images.Media._ID + "=?";
cursor = activity.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column,
sel, new String[] { id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
path = cursor.getString(columnIndex);
}
cursor.close();
}else{
String[] projection = { MediaStore.Images.Media.DATA };
cursor = activity.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
path = cursor.getString(column_index);
}
if(cursor!=null&&!cursor.isClosed()){
cursor.close();
}
}
return path;
}
相关文章推荐
- Android BaseAdapter 更新数据 notifyDataSetInvalidated() notifyDataSetChanged()
- android二级listview列表
- Android(java)学习笔记153:layout_weight使用注意事项
- android语音识别技术
- The word is not correctly spelled
- Android数据库安全解决方案,使用SQLCipher进行加解密
- ionic 中默认安装后导航在底部解决方案 $ionicConfigProvider, ios and android
- Android的各种数据存储方式_part1
- Android: 线程的结束,挂起和恢复
- Android开发中Handler的经典总结
- Android—IntentService
- Android之读取大图片内存溢出
- Android文件存储
- android中listview分页加载数据
- Android客户端和服务端如何使用Token和Session
- android抽屉实现
- Android中SMS的接收处理
- android 安装目录介绍
- php、java、android、ios通用的3des加密方法
- Android Studio导入JAR包(以ButterKnife为例)