不同厂商android手机拍照OnActivityResult时获取不到照片路径和...
原文:http://www.eoeandroid.com/thread-199471-1-1.html
不同厂商android手机拍照OnActivityResult时获取不到照片路径和缩略图  还有就是默认相机拍完照都会在DCIM文件夹下 默认存储一个文件  我的目的是为了删除这个临时文件和顺利拍照。。。。
肯定有好多人都在网上搜关于相机拍照的代码,好多都是Copy来Copy去同一个答案,找的蛋蛋都碎了一地,你们肯定有同样的感受。
这两天一直有一个bug在尾随这我,甩都甩不掉,终于终于今天被我逮住了,使用原生的Action调用相机实现自己的拍照,程序并获取到缩略图和原图
经过几次的bug修改终于在常用的三款机器的顺利运行了  SAMSUNG 和 HTC 还有小米,废话说的不少了,下边上代码及贴图
调用相机拍照
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |      tikePic.setOnClickListener(newOnClickListener() {                        @Override                        publicvoidonClick(View v) {                                if(list.size() >= 4) {                                        Toast.makeText(CameraActivity.this, "最多四张", Toast.LENGTH_SHORT).show();                                        return;                                }                                Intent intent = newIntent(MediaStore.ACTION_IMAGE_CAPTURE);                                SDCardFileUtils.creatDir2SDCard(fileDir);                                intent.putExtra(MediaStore.EXTRA_OUTPUT,                                                Uri.fromFile(newFile(fileDir, DateFormat.format("yyyy-MM-dd-hh-mm-ss", newDate()) + ".jpg")));                                File file = newFile(fileDir);                                olderList = file.list();                                startActivityForResult(intent, 0);                        }                }); | 
使用回调函数获取缩略图及原图
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |               @OverrideprotectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) {                super.onActivityResult(requestCode, resultCode, data);                newFiles = newFile(fileDir).list();                if(newConstants().PHOTO_CACHE==null){                        AlertDialogUtils.showDialog(this, android.R.drawable.ic_dialog_info, "提示", "SDCard不存在,相机功能暂时无法使用");                        return;                }                String filePath = "";                Object object = null;                 if(requestCode == 0) {                        if(data!=null){                                //HTC                                if(data.getData() != null) {                                        //根据返回的URI获取对应的SQLite信息                                        Cursor cursor = this.getContentResolver().query(data.getData(), null,                                                        null, null, null);                                        if(cursor.moveToFirst()) {                                                filePath = cursor.getString(cursor.getColumnIndex("_data"));// 获取绝对路径                                        }                                        cursor.close();                                }else{//三星  小米(小米手机不会自动存储DCIM...  这点让哥又爱又恨...)                                        object = (Bitmap) (data.getExtras() == null? null: data.getExtras().get("data"));                                }                        }                        //直接强转报错  这个主要是为了去高宽比例                        Bitmap bitmap = object==null?null:(Bitmap)object;                        filePath = StringUtils.isNotBlank(filePath)?filePath:getRealFilePath();                        if(RESULT_OK == resultCode) {                                //缩略图                                if(bitmap == null) {                                        /**                                         * 该Bitmap是为了获取压缩后的文件比例 如果没有缩略图的比例  就获取真实文件的比例(真实图片比例会耗时很长,所以如果有缩略图最好)                                         */                                        bitmap = BitmapFactory.decodeFile(filePath);                                }                                /**                                 * 1.压缩之前应该先删除DCIM中系统默认存储文件                                  * 2.然后再进行压缩                                  * 3.最后退出时删除转换后的文件                                 *///                                LogUtils.i(TAG, "缩略图高:" + hight + "宽:" + width);                                ImageViewInfo imageViewInfo = zoomBitmap(filePath, bitmap.getHeight(), bitmap.getWidth(),                                                newConstants().PHOTO_CACHE+FileNameUtils.getName(filePath));                                list.add(imageViewInfo);                                adapter.notifyDataSetChanged();                                deleteDifferentFile(olderList,newFiles);                                return;                        }                }        }         | 
图片是项目中的
<ignore_js_op> 
 
亲们  有所帮助的话 记得回帖哈!
下边的是我针对这个问题单独做出来的一个Demo   辛辛苦苦啊  
"看帖必回 是种美德"  程序猿  你懂得 
APK: <ignore_js_op> MyCamera.apk
 MyCamera.apk 
SRC: <ignore_js_op> MyCamera.zip
 MyCamera.zip
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号