`

android调用系统相机实现拍照功能

 
阅读更多

在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题。

虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个android采集系统的演示程序。拍照是其中一个功能,让网搜索了下拍照有两种方式,其中一种就是调用系统相机实现拍照功能。

启动照相机进行拍照,代码如下:

  1. btnCamera.setOnClickListener(newButton.OnClickListener()
  2. {
  3. publicvoidonClick(Viewv)
  4. {
  5. Intenti=newIntent("android.media.action.IMAGE_CAPTURE");
  6. startActivityForResult(i,Activity.DEFAULT_KEYS_DIALER);
  7. }
  8. });
获取拍照后图片数据,代码如下:
  1. @Override
  2. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
  3. {
  4. switch(resultCode)
  5. {
  6. caseRESULT_OK:
  7. super.onActivityResult(requestCode,resultCode,data);
  8. if(data!=null){
  9. Bundleextras=data.getExtras();
  10. Bitmapbmp=(Bitmap)extras.get("data");
  11. ivstorepic.setImageBitmap(bmp);//设置照片现实在界面上
  12. hasShootPic=true;//此变量是在提交数据时,验证是否有图片用
  13. }
  14. else
  15. {
  16. hasShootPic=false;
  17. }
  18. break;
  19. default:
  20. break;
  21. }
  22. }
此时,遇到第一个问题,使用miui系统手机拍照时,无法获取到照片数据,使用Log打印数据之后发现Bitmap bmp = (Bitmap) extras.get("data"); 处出现异常。然后搜索了很多资料,问了很多人,都说这个代码没有问题。但是问题还是要解决,后来想是不是可以把数据存放在SDcard上,然后读取SDcard上数据显示在图形空间上。测试之后发现这样可以实现。其中涉及到的变量定义如下:
  1. publicstaticfinalStringSDCARD_ROOT_PATH=android.os.Environment.getExternalStorageDirectory().getAbsolutePath();//路径
  2. publicstaticfinalStringSAVE_PATH_IN_SDCARD="/bi.data/";//图片及其他数据保存文件夹
  3. publicstaticfinalStringIMAGE_CAPTURE_NAME="cameraTmp.png";//照片名称
  4. publicfinalstaticintREQUEST_CODE_TAKE_PICTURE=12;//设置拍照操作的标志

启动相机进行拍照,代码如下:
  1. btnCamera.setOnClickListener(newButton.OnClickListener(){
  2. publicvoidonClick(Viewv){
  3. //TODOAuto-generatedmethodstub
  4. Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
  5. //存储卡可用将照片存储在sdcard
  6. if(SimpleFileTool.isHasSdcard()){
  7. intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(newFile(SDCARD_ROOT_PATH+
  8. SAVE_PATH_IN_SDCARD,IMAGE_CAPTURE_NAME)));
  9. }
  10. startActivityForResult(intent,REQUEST_CODE_TAKE_PICTURE);
  11. }
  12. });

获取拍照后图片数据,代码如下:
  1. @Override
  2. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  3. if(resultCode==RESULT_OK){
  4. if(requestCode==REQUEST_CODE_TAKE_PICTURE){//拍照返回
  5. //存储卡可用
  6. if(isHasSdcard()){
  7. getImage(SDCARD_ROOT_PATH+SAVE_PATH_IN_SDCARD+IMAGE_CAPTURE_NAME);
  8. }
  9. else{
  10. //存储卡不可用直接返回缩略图
  11. Bundleextras=data.getExtras();
  12. bitmap=(Bitmap)extras.get("data");
  13. img.setImageBitmap(bitmap);
  14. img.setVisibility(View.VISIBLE);
  15. hasShootPic=false;
  16. }
  17. }
  18. }
  19. super.onActivityResult(requestCode,resultCode,data);

  1. /**
  2. *检查存储卡是否插入
  3. *@return
  4. */
  5. publicstaticbooleanisHasSdcard()
  6. {
  7. Stringstatus=Environment.getExternalStorageState();
  8. if(status.equals(Environment.MEDIA_MOUNTED)){
  9. returntrue;
  10. }else{
  11. returnfalse;
  12. }
  13. }


  1. /*获得图片图片高度最大maxH
  2. *@paramimagePath
  3. */
  4. Bitmapbitmap;
  5. intmaxH=200;//
  6. privatevoidgetImage(StringimagePath){
  7. BitmapFactory.Optionsoptions=newBitmapFactory.Options();
  8. options.inJustDecodeBounds=true;
  9. //获取这个图片的宽和高
  10. bitmap=BitmapFactory.decodeFile(imagePath,options);//此时返回bm为空
  11. //计算缩放比
  12. intbe=(int)(options.outHeight/(float)maxH);
  13. intys=options.outHeight%maxH;//求余数
  14. floatfe=ys/(float)maxH;
  15. if(fe>=0.5)be=be+1;
  16. if(be<=0)
  17. be=1;
  18. options.inSampleSize=be;
  19. //重新读入图片,注意这次要把options.inJustDecodeBounds设为false
  20. options.inJustDecodeBounds=false;
  21. bitmap=BitmapFactory.decodeFile(imagePath,options);
  22. img.setImageBitmap(bitmap);
  23. img.setVisibility(View.VISIBLE);
  24. }

以上代码,实现功能实际上是直接把图片存储在SDcard内,然后读取数据现实,后面之所以加上一个直接获取数据返回的代码,是为了兼容一些手机。测试了几款手机后发现可正常,使用也算解决了目前遇到的问题。记录下来,备忘。


分享到:
评论

相关推荐

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

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

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

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

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

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

    android调用系统自带照相机拍照

    在Android开发中,调用系统...总的来说,Android调用系统自带相机拍照涉及权限管理、Intent启动相机应用、处理返回结果以及可能的自定义存储路径。理解这些知识点对于开发Android应用中涉及拍照功能的部分至关重要。

    Android 调用系统相机拍照

    在Android应用开发中,调用系统相机拍照是一项常见的功能,用户可以使用手机摄像头捕捉图片,然后将图片数据返回到应用程序中。本篇文章将详细介绍如何在Android应用中实现这一功能,特别是静默拍照的方法。 首先,...

    android手机相机自动连续拍照

    在Android平台上,开发一款能实现自动连续拍照的应用是一项常见的任务,尤其对于那些需要连续拍摄功能的用户来说,如监控、教学或艺术创作等场景。本文将深入探讨如何利用Android的Camera API或Camera2 API来创建一...

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

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

    androidの调用系统相机拍照

    通过以上步骤,你可以在自己的Android应用中轻松实现调用系统相机拍照的功能。在实际开发中,你可能还需要考虑图片的质量、分辨率、旋转问题、兼容性等更多细节,确保应用在不同设备上的表现一致。

    Android 调用系统相机拍照、以及相册

    在Android应用开发中,调用系统相机拍照和访问相册是常见的功能,用户可以通过这些功能获取并处理图像。本文将详细讲解如何实现这两个功能,并提供一个名为`TakePhotoDemo`的示例项目作为参考。 首先,调用系统相机...

    android studio 调用相机拍照,选择相册照片

    在Android开发中,调用相机拍照和选择相册照片是常见的功能,这涉及到Android系统级别的交互和权限管理。本文将详细讲解如何在Android Studio中实现这两个功能,并将获取的图片进行存储。 首先,我们需要在...

    Android调用系统相机进行拍照

    调用系统相机进行拍照demo,代码是自己跟着慕课网课程《Android摄像头基础》(https://www.imooc.com/u/2950649/courses)中手动敲的,如果大家不想下载可以直接去看视频讲解,很短而且讲的不错。需要注意的是在真机...

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

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

    Android调用系统相机简单实现

    在Android应用开发中,调用系统相机是一项常见的功能,它允许用户通过应用直接启动设备的摄像头进行拍照或录像。下面将详细介绍如何在Android应用中实现这一功能,包括所需的步骤、关键代码以及注意事项。 首先,...

    调用android系统相机拍照

    在Android平台上,调用系统相机拍照是常见的功能之一,它涉及到Android SDK中的多个知识点,包括Intent、Camera API、MediaStore以及图片处理等。下面将详细解释这些知识点。 首先,我们来了解一下如何通过Intent来...

    Android实现后台连续静默拍照

    总结,实现Android后台连续静默拍照涉及了权限管理、相机API的使用、服务的创建与管理、静音设置、图片存储以及性能优化等多个方面。开发者需要深入理解Android系统的工作原理,才能成功实现这一功能。

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

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

    Android 实现调用系统照相机拍照和录像的功能

    在实现调用系统照相机拍照的功能时,我们通常会通过定义一个Intent,并将其action设置为"android.media.action.IMAGE_CAPTURE",这个action告诉系统我们希望调用的是拍照功能。 1. 在AndroidManifest.xml中配置...

    android 调用系统照相机功能

    以上就是Android应用调用系统照相机功能的基本步骤,包括拍照和录像。需要注意的是,不同设备和Android版本可能有差异,实际开发中需要做好兼容性处理。同时,随着Android系统更新,新的API可能会提供更简洁、安全的...

    Android + <调用相机拍照 & 选择相册> + 数码相机

    【TakePicture】项目分为两大部分...实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。

    android调用系统拍照

    拍照或者从相册中选择图片后,我们都可以直接或间接的得到Uri或源文件。 通过`imageView.setImageUri(uri)`不会引发图片方向不正确的问题。 但是通过`BitmapFactory.decodeFile&#40;&#41;;`将源文件解析成Bitmap后再...

Global site tag (gtag.js) - Google Analytics