好吧,为了这个问题又折腾了一整天。之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就知道了。如果要获取原图,还需要一番折腾(特别是对于手里这个Samsung i9000)——之前朋友在不同的机型上使用的方法在我这里一直报错,且属于那种uncaught的错误-.- 
话说回来,具体的折腾方法如下(如果不幸你看到了,希望不要“折疼了”): 
在拍照的出发按钮的点击事件中写入如下代码: 
toCam.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
//先验证手机是否有sdcard 
String status=Environment.getExternalStorageState(); 
if(status.equals(Environment.MEDIA_MOUNTED)) 

try { 
File dir=new File(Environment.getExternalStorageDirectory() + "/"+localTempImgDir); 
if(!dir.exists())dir.mkdirs();

Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
File f=new File(dir, localTempImgFileName);//localTempImgDir和localTempImageFileName是自己定义的名字 
Uri u=Uri.fromFile(f); 
intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, u); 
startActivityForResult(intent, GET_IMAGE_VIA_CAMERA); 
} catch (ActivityNotFoundException  e) { 
// TODO Auto-generated catch block 
Toast.makeText(ImpromptuActivity.this, "没有找到储存目录",Toast.LENGTH_LONG).show();  

}else{ 
Toast.makeText(ImpromptuActivity.this, "没有储存卡",Toast.LENGTH_LONG).show(); 

dialog.dismiss(); 

});

在onActivityResult中这样折腾: 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if(resultCode==RESULT_OK ) 

switch(requestCode) 

case GET_IMAGE_VIA_CAMERA: 
File f=new File(Environment.getExternalStorageDirectory() 
+"/"+localTempImgDir+"/"+localTempImgFileName); 
try { 
   Uri u = 
   Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), 
   f.getAbsolutePath(), null, null)); 
   //u就是拍摄获得的原始图片的uri,剩下的你想干神马坏事请便…… 
} catch (FileNotFoundException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 

break; 


super.onActivityResult(requestCode, resultCode, data); 
}

别高兴太早了,还有关键问题: 
上面的代码只要你会用google,一般都能找来拼凑一番。但是,仅仅是这样,你还会得到未知错误……Samsung的系统相机,版式是横板的,如果你的activity恰巧是竖版的,那么获取这个回调uri的时候,很可能为空! 
原因在于,如果你没有设置版式改变的时候,activity不要调用onCreate方法!这就是要命的地方! 
设置方法其实很简单: 
1、在Manfest.xml中,给activity添加一个属性:android:configChanges="orientation|keyboardHidden" 
2、在activity中添加: 
@Override 
    public void onConfigurationChanged(Configuration config) { 
    super.onConfigurationChanged(config); 
    } 
另外还有一个蛋疼的错误容易犯:千万别给这个activity添加单例模式,即:android:launchMode="singleInstance"

好了,完成这些,你就终于可以不“折疼”了! good luck!

照相得到的图片,最好自己指定路径,这样返回数据时,就不用从Intent中获取了,我们知道是什么路径,可以直接去拿。

android 调用系统相机拍照 获取原图的更多相关文章

  1. Android 调用系统相机拍照保存以及调用系统相册的方法

    系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new ...

  2. android调用系统相机并获取图片

    如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...

  3. Android调用系统相机拍照保存照片很小解决方案

    保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityFo ...

  4. Android 调用系统相机拍照并获取原图

    第一步:调用相机 Intent getImageByCamera = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); St ...

  5. Android 调用系统相机拍照,生命周期重走OnCreate,导致无数据的解决办法

    extends:http://blog.csdn.net/b275518834/article/details/42347903 BUG具体体现为 : (1) 摄像头拍照后图片数据不一定能返回 ; o ...

  6. android调用系统相机拍照并保存在本地

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...

  7. 【踩坑速记】MIUI系统BUG,调用系统相机拍照可能会带给你的一系列坑,将拍照适配方案进行到底!

    一.写在前面 前几天也是分享了一些学习必备干货(还没关注的,赶紧入坑:传送门),也好久没有与大家探讨技术方案了,心里也是挺痒痒的,这不,一有点闲暇之时,就迫不及待把最近测出来的坑分享给大家. 提起An ...

  8. Android下载图片/调用系统相机拍照、显示并保存到本地

    package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException ...

  9. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

    Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...

随机推荐

  1. memcached全面剖析--4. memcached的分布式算法

    我是Mixi的长野. 第2次.第3次由前坂介绍了memcached的内部情况.本次不再介绍memcached的内部结构,开始介绍memcached的分布式. memcached的分布式 正如第1次中介 ...

  2. Nginx https证书部署

    1 获取证书 Nginx文件夹内获得SSL证书文件 1_www.domain.com_bundle.crt 和私钥文件 2_www.domain.com.key,1_www.domain.com_bu ...

  3. [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样

    文章已经迁移到:http://www.ayjs.net/post/99.html 文章已经迁移到:http://www.ayjs.net/post/99.html 文章已经迁移到:http://www ...

  4. javascript 中 split 函数分割字符串成数组

    分割字符串成数组的方法有很多,不过使用最多的还是split函数 <script language="javascript"> str="2,2,3,5,6,6 ...

  5. process credentials(二)

    一.前言 为什么要写一个关于进程如何创建的文档?其实用do_fork作为关键字进行索引,你会发现网上的相关文档数以万计.作为一个内核工程师,对进程以及进程相关的内容当然是非常感兴趣,但是网上的资料并不 ...

  6. SharePoint下在Feature中动态Register/Remove HttpModule

    在SharePoint开发时,你会遇到这样一个问题,Global.asax去哪儿?怎样添加一个Global.asax?怎样在Application_Start这个事件处理程序里设置初始化?似乎在Vis ...

  7. Javascript MVC 学习笔记(一) 模型和数据

    写在前面 近期在看<MVC的Javascript富应用开发>一书.本来是抱着一口气读完的想法去看的.结果才看了一点就傻眼了:太多不懂的地方了. 仅仅好看一点查一点,一点一点往下看吧,进度虽 ...

  8. 常用的web安全处理

    1:用户名和密码认证通过后,必须更换会话标识,以防止会话固定(session fixation)漏洞. 实施指导: 在用户名和密码认证通过后增加以下两行代码: request.getSession() ...

  9. [转] linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )

    1: 台式机家里面不想再走线了. 于是去某东买了个USB无线网卡.tp的WN725N  USB,非常小, 和罗技的优联接收器差不多大. 2:  驱动能自己识别是不指望了,既然是usb网卡,插入USB后 ...

  10. 常用代码之八:setTimeout 和 clearTimeout。

    1.先写一个错误的例子:   function DealSomething() {        //write some code        window.setTimeout(function ...