android 如何从系统相册中获取图片
2015-02-20 13:31
260 查看
http://bbs.csdn.net/topics/390133207
需要在项目中加入一个从系统相册中选取图片的功能,选择的图片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的系统能用这个方法调相册图片吗,有没有更通用的方法,求教,谢啦~~~
=========
这是我的,测试手机为小米,酷派,索爱
======
为啥我这测试每次照相保存后,相册里面读取不到。
需要在项目中加入一个从系统相册中选取图片的功能,选择的图片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的系统能用这个方法调相册图片吗,有没有更通用的方法,求教,谢啦~~~
=========
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);
这是我的,测试手机为小米,酷派,索爱
======
为啥我这测试每次照相保存后,相册里面读取不到。
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()); } }
相关文章推荐
- Android图片系列(1)-------调用系统相册与相机获取图片
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时为什么会回到home界面或者到前一个界面,然后才会跳转到当前activity
- Android调用系统相册或相机获取图片
- Android打开系统相机、相册,并进行裁剪图片的工具类CameraUtil,以及相册获取图片注意要点。
- android4.4.4 获取系统相册图片出错的问题(二)
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- 系统相机相册获取图片并裁剪之Android N适配
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- Android获取系统相册所有图片
- Android 如何从相册(gallery)获取一张图片?
- Android 获取系统相册中的所有图片
- Android跳转系统相机或相册获取图片
- android 从系统相册获取一张图片
- iOS开发swift如何调用系统相册和相机获取图片设置用户头像
- Android获取系统相册图片并裁剪(兼容4.4以上版本)
- android获取相册图片方法,支持5.0系统上下版本
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- android 调用系统相册选取照片或者打开相机拍照获取图片
- Android获取系统相册里的全部图片
- Android拍照或从系统相册获取图片