不同厂商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(new OnClickListener() {                        @Override
                        public void onClick(View v) {
                                if (list.size() >= 4) {
                                        Toast.makeText(CameraActivity.this, "最多四张", Toast.LENGTH_SHORT).show();
                                        return;
                                }
                                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                SDCardFileUtils.creatDir2SDCard(fileDir);
                                intent.putExtra(MediaStore.EXTRA_OUTPUT,
                                                Uri.fromFile(new File(fileDir, DateFormat.format("yyyy-MM-dd-hh-mm-ss", new Date()) + ".jpg")));
                                File file = new File(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
              @Override        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                newFiles = new File(fileDir).list();
                if(new Constants().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(),
                                                new Constants().PHOTO_CACHE+FileNameUtils.getName(filePath));
                                list.add(imageViewInfo);
                                adapter.notifyDataSetChanged();
                                deleteDifferentFile(olderList,newFiles);
                                return;
                        }
                }
        }
         



图片是项目中的
<ignore_js_op> 
亲们  有所帮助的话 记得回帖哈!
下边的是我针对这个问题单独做出来的一个Demo   辛辛苦苦啊  
"看帖必回 是种美德"  程序猿  你懂得 
APK: <ignore_js_op> MyCamera.apk 

SRC: <ignore_js_op> MyCamera.zip

posted @ 2014-03-28 11:40  花开花落云卷云舒  阅读(943)  评论(0)    收藏  举报