首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android 怎么从系统相册中获取图片

2012-08-29 
android 如何从系统相册中获取图片需要在项目中加入一个从系统相册中选取图片的功能,选择的图片bitmap显示

android 如何从系统相册中获取图片
需要在项目中加入一个从系统相册中选取图片的功能,选择的图片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的系统能用这个方法调相册图片吗,有没有更通用的方法,求教,谢啦~~~

[解决办法]

Java code
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); 

热点排行