今天遇到一个选择图片的问题,通过下边的方式打开相册后选择图片上传无效
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
((Activity) ctx).startActivityForResult(intent,
ProfilePhotoTask.PHOTO_PICKED);
经过调试发现不同:
6.0操作系统打开相册后,左侧有一个菜单栏,包含:最近、图片、相册、文件管理。
在最近和图片菜单中选择图片时返回的uri是这样的:
content://com.android.providers.media.documents/document/image%3A404303
content://com.android.providers.media.documents/document/image%3A228455
而在相册中选择图片返回uri是这样:
content://media/external/images/media/324491
项目中通过uri获取path是通过cursor,最近和图片的uri格式不符导致返回的path为空
public String getPath(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
显而易见解决方法有两种:
第一种 针对不同的uri使用不同的getPath()方法。
第二种 修改打开相册action方式,使得屏蔽左侧菜单栏。
在这里我采用的是第二种:
Intent picture = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
((Activity) ctx).startActivityForResult(picture, ProfilePhotoTask.PHOTO_PICKED);