不同厂商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
浙公网安备 33010602011771号