`
hxdawxyhxdawxy
  • 浏览: 125802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android 调用系统相机拍照 获取原图

 
阅读更多
好吧,为了这个问题又折腾了一整天。之前在网上找来的方法,如果在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!
分享到:
评论

相关推荐

    Android调用系统相机拍照(返回为原图)

    Android调用系统相机拍照,默认返回为缩略图大约几十K,一些场景下返回缩略图时不行的。在这个源码里分别实现了调用系统相机后返回缩略图(几十k)和原图(1—n M不等的图片(即正常用相机拍照的图片))。

    Android 调用系统相机拍摄获取照片的两种方法实现实例

    在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片。下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通过SD卡获取的原图。 下面是演示代码...

    H5 调用android 相机拍照

    H5 调用android本地相机进行拍照,支持android 5.0, 6.0等操作系统,均已适配;

    Android部分手机拍照后获取的图片被旋转问题的解决方法

    调用Android系统拍照功能后,三星手机拍摄后的照片被...1、首先在调用拍照方法时,保存拍照后的相片原图,得到原图路径,(PhotoBitmapUtils是我自己写的一个工具类) String fileName = ; /** * 启动相机拍照 */ p

    Qt for android打开原生系统相机和相册

    资源中的打开相机和相册均是原生Java代码实现,在我自己手机和安卓7.0版本上面稳定可靠,测试在魅族5.0版本左右打开相机会死掉,由Qt调用,demo可学习Qt如何与原生Java的交互通信,代码均有注释,里面还有微信等接口...

    Qt调用原生安卓照相机

    Qt调用安卓照相机,配合Qml和Java函数接口,照相机中技术包括摄像,打开相册,照相,播放摄像视频

    android 调用相机显示拍摄后的图片

    对于拍摄照片我们可以直接调用系统自带的相机拍照,一般情况下无需我们自己开发相机拍照。 1、当点击按钮后我们可以通过Intent意图启动系统相机 @Override public void onClick(View v) { Intent intent=new ...

    delphi xe6 android 调用照相机摄像头拍照片

    delphi xe6 android 调用照相机摄像头拍照片,简单非常实用的原代码,无特定组件,真机调试没问题.

    源码 拍照&文件上传&录像&监控 android 调用系统相机图库裁剪-图片上传-客服端(测试可用).zip

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累... 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。

    前端H5获取Android原生相册文件和拍照功能直接重新WebView的方法即可

    前端H5获取Android原生相册文件和拍照功能,比如H5的<input type>类型,ios不用做任何处理,而Android需要对webview重新

    Unity打开IOS/Android图库和相机获取相片

    Unity调用IOS/Android原生接口打开移动端图库或者相机,选择图片后保存在Unity目录中,然后Unity加载显示。

    react-native调用原生安卓android(兼容7.0以上版本)系统相机拍照和选择相册照片,并将返回结果用作头像

    要从RN中调用原生相机拍照和选择照片思路是这样的,先在原生中创建一个ReactContextBaseJavaModule模块,并在该模块中显示调用原生相机和选择照片的方法。然后,将该模块添加到ReactPackage列表中。最后,在js中导入...

    安卓调用手机相机压缩并上传图片

    搜集网上资源做的,对手机保存原来的图片保存后,对原图压缩并保存。并删除原图。在图片上传完成后,对压缩的图片进行删除。减少SD卡的内存空间。

    Vue项目实现手机端上传图片,使用于PC/Android/Ios

    基于Vue实现跨平台上传图片,pc端访问时上传图片资源,移动端访问时调用相册,可拍照和从相册里选择并在页面可进行预览。文档记录了java后端和vue前端两部分核心代码包括注释说明

    poco相机 android v1.1.1

    “POCO相机”是针对手机拍照用户群推出的多镜头拍照及视频、美化处理、一键多平台分享的超级手机拍照工具。 ● iPhone版上线一周内,相继荣登大陆/港澳台/新马泰等华语国家及地区free apps排行榜第一!成为苹果商店...

    安卓简单QQ

    拍照模块 调用系统相机进行拍照、并将拍照结果保存到指定目录下 我的相册模块 查看指定目录下的照片 我的视频模块 播放指定目录下的视频文件 分享软件模块 分享软件给输入的号码发送短信 地理位置模块 通过使用高德...

    Google Android SDK开发范例大全(第3版) 1/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    Google Android SDK开发范例大全(第3版) 4/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    Google Android SDK开发范例大全(第3版) 3/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

Global site tag (gtag.js) - Google Analytics