android 如何从系统相册中获取图片

wzy820715 2012-07-13 11:32:07
需要在项目中加入一个从系统相册中选取图片的功能,选择的图片bitmap显示出来即可,不需要图片剪切功能

网上的例子很多,我用的以下代码实现的

Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra("return-data", true);

startActivityForResult(intent, 0);

在原来的Activity中如下获取选到的图片:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
System.out.println(resultCode);
Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data");
super.onActivityResult(requestCode, resultCode, data);

}

========================================================

但是现在用遇到个很郁闷的问题,我觉得是适配的问题

我用5款手机测试了一下这个功能:
1)galaxy note (系统2.3.5)
功能正常

2)i9100 (系统2.3.5)
功能正常

3)galaxy nexus (系统4.0.4)
提示Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data");空指针
logcat报错:Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://media/external/images/media/11156 }} to activity {com.abc/com.abc.ui.CameraActivity}: java.lang.NullPointerException

4)sony X10i(系统2.3.3)
进入相册点击图片没反应,不跳转,按back也不能返回
5)华为c8650(系统2.3.3)
直接返回开启相册的activity,没有拿到图片

请教下高手这是什么问题,难道只有2.3.5的系统能用这个方法调相册图片吗,有没有更通用的方法,求教,谢啦~~~
...全文
16760 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mutouzhangada 2014-11-17
  • 打赏
  • 举报
回复
楼主问题解决了吗,我也遇到了这个问题,快疯啦 解决不了 伤心
engliuo 2014-11-11
  • 打赏
  • 举报
回复
为啥我这测试每次照相保存后,相册里面读取不到。
private void getAllSDImageFolder() {
        String[] projection = new String[] { MediaStore.Images.Media._ID,
                        MediaStore.Images.Media.BUCKET_ID, // 直接包含该图片文件的文件夹ID,防止在不同下的文件夹重名
                        MediaStore.Images.Media.BUCKET_DISPLAY_NAME, // 直接包含该图片文件的文件夹名
                        MediaStore.Images.Media.DISPLAY_NAME, // 图片文件名
                        MediaStore.Images.Media.DATA, // 图片绝对路径
                        "count("+MediaStore.Images.Media._ID+")"//统计当前文件夹下共有多少张图片
        };
        String selection = " 0==0) group by bucket_display_name --(";
        
        ContentResolver cr = AlbumlistFragment.this.getActivity().getContentResolver();
        
        Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection,null, "");
        
        if(null != cursor){
        	while(cursor.moveToNext()){
                String folderId = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID));
                folderIDS[folderIndex] = folderId;
                String folder = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME));
                folderNames[folderIndex] = folder;
                long fileId = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
                String finaName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
                String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                int count = cursor.getInt(5);//该文件夹下一共有多少张图片
                BitmapFactory.Options options = new BitmapFactory.Options();
                Bitmap bitmap = Thumbnails.getThumbnail(cr, fileId, Thumbnails.MICRO_KIND, options);//获取指定图片缩略片
                thumbS.add(bitmap);
                folderIndex++;
            }
            if(!cursor.isClosed()){
                cursor.close();
            }
            
            listview.setAdapter(new ItemAdapter());
        }
	}
深夜深几许 2012-07-13
  • 打赏
  • 举报
回复

Bundle bundle = data.getExtras();
System.out.println("Camera--------------75------");
paizhao = false;
xiangce = true;
Uri originalUri = data.getData();
if (originalUri != null) {
Bitmap bitMap = null;
try {
if(bitMap!=null)bitMap.recycle();
bitMap = null;
bitMap = MediaStore.Images.Media.getBitmap(resolver,
originalUri);
String[] proj = { MediaColumns.DATA };
Cursor cursor = managedQuery(originalUri, proj, null, null,
null);
// 按我个人理解 这个是获得用户选择的图片的索引值
int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
System.out.println("706-------------camera------"
+ column_index);
// 将光标移至开头 ,这个很重要,不小心很容易引起越界
cursor.moveToFirst();

// 最后根据索引值获取图片路径
ByteArrayOutputStream out = new ByteArrayOutputStream();
uploadPhotPath = cursor.getString(column_index);
System.out
.println("camera--------------------561----------- 相册图片的地址--------"
+ uploadPhotPath);
Bitmap map = scaleImg(bitMap, 250, 420);
map.compress(Bitmap.CompressFormat.JPEG, 25, out);
photo = out.toByteArray();
intTobyte(photo.length); // 图片的长度
System.out
.println("camera-----------------565----------相册图片的长度-----"
+ photo.length);
cam_photo.setImageBitmap(map);



这是我的,测试手机为小米,酷派,索爱
ldoublem 2012-07-13
  • 打赏
  • 举报
回复
我也是遇到这样的问题 不同的手机会报错,求解
wzy820715 2012-07-13
  • 打赏
  • 举报
回复
自己先顶一下吧~

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧