`

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!

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

分享到:
评论
3 楼 z437955114 2015-11-17  
太感谢了,困扰了好久
2 楼 dragon0236 2015-08-28  
解决了我困扰好多天的问题,谢谢大虾分享    
1 楼 liuyanji 2015-05-14  
厉害。我没有看你最后发的注意事项,导致了很多用户找我,唉

相关推荐

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

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

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

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

    Android下WebView中调用系统相机拍照范例

    // 实现调用相机拍照,并保存照片到SD卡的逻辑 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File photoFile = createImageFile(filename); if (photoFile != null) { Uri photoURI = File...

    android调用相机拿到原图

    在Android开发中,调用相机获取原图是一个常见的需求,特别是在开发摄影类或者图片编辑类应用时。要实现这一功能,我们需要理解Android系统的相机API以及如何处理拍摄后的图像数据。以下是一些关键知识点: 1. **...

    Android调用系统相机、相册实现拍照、图片多选Demo移动开发

    在Android应用开发中,调用...总之,Android调用系统相机和相册并不复杂,只需要理解Intent的工作原理以及如何与系统服务进行交互。遵循这些步骤,开发者可以轻松实现拍照和图片多选功能,而无需引入额外的第三方库。

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

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

    Android 调用相机拍照 添加照片水印

    以上就是Android调用相机拍照并添加照片水印的基本流程。在实际开发中,你可能还需要根据具体需求进行优化,例如添加图片裁剪功能、支持图片旋转、自定义水印样式等。记住,良好的用户体验和性能优化也是必不可少的...

    H5 调用android 相机拍照

    通过以上步骤,我们就成功实现了H5调用Android本地相机拍照的功能,并确保了在Android 5.0、6.0等不同版本上的兼容性。当然,实际应用中还需要考虑更多细节,比如图片的压缩、用户权限的处理、拍照结果的反馈等。这...

    Android调用系统相机、相册实现拍照、图片多选Demo

    1. **调用系统相机拍照** 要调用系统相机进行拍照,首先需要在AndroidManifest.xml文件中添加相机权限: ```xml <uses-permission android:name="android.permission.CAMERA" /> ``` 然后,在需要触发拍照的按钮...

    Qt调用原生安卓照相机

    在这个类中,你需要实现调用Android系统照相机的相关方法,如开启相机、获取图片或视频等。以下是一个简单的示例: ```java package com.example.qtapp; public class MyCameraWrapper { static { System....

    Android WebView H5调用拍照

    在“Android WebView H5调用拍照”这个主题中,我们将深入探讨如何通过WebView组件和H5页面实现用户调用手机摄像头拍照的功能。 首先,我们需要理解WebView的基本使用。在AndroidManifest.xml文件中,为应用添加...

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

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

    Unity3d调用手机相机拍照回传到U3D

    - 在AndroidManifest.xml(Android)和Info.plist(iOS)中添加相机访问权限,确保应用有权限调用相机。 5. **用户体验**: - 在Unity中创建UI界面,如按钮,用于触发拍照操作,并显示拍好的图片。 - 使用Unity...

    调用系统相机拍照

    在Android应用开发中,调用系统相机拍照是一个常见的功能需求,允许用户通过手机摄像头捕捉图像并将其保存到本地。这个过程涉及到多个步骤,包括请求权限、启动相机应用、处理返回的数据以及保存图片到SD卡。以下是...

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

    打开`uMain.fmx`文件,添加一个`TLayout`控件作为相机预览的容器,并在布局上添加一个`TButton`控件,用于触发相机拍照操作。按钮的Caption可以设置为"拍照"。 接下来,我们需要编写代码来处理相机的调用和照片的...

    轻量级的android原生图片选择拍照第三方库

    2. **拍照功能**:用户可以直接调用相机进行拍照,TakePhoto会处理拍照后的图片,确保它能适应应用的使用场景。这包括了对拍摄结果的裁剪和调整大小等操作。 3. **图片压缩**:为了减少内存消耗和网络传输的成本,...

    Xamarin Froms 调用相机拍照和图库选择图片

    综上所述,通过 Xamarin.Forms 和依赖服务,我们可以轻松地实现在跨平台应用中调用设备的相机拍照以及访问图库选择图片的功能。这不仅简化了代码,而且保证了在不同平台上的一致用户体验。在开发过程中,确保遵循...

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

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

    安卓调用相机拍照

    本项目标题“安卓调用相机拍照”表明我们将会探讨如何在Android应用中集成相机功能,让用户能够通过点击按钮启动系统相机进行拍摄。描述中的“自己写了一个熟悉熟悉”暗示这是一个学习和实践的过程,可能包含自定义...

Global site tag (gtag.js) - Google Analytics