Android下相机的调用

      Android下相机的调用分别为调用系统相机和Building a Camera App两种用法;

一、调用系统相机

1.MainActivity.java文件

 1 package com.example.takephoto; 2  3 import java.io.File; 4  5 import android.net.Uri; 6 import android.os.Bundle; 7 import android.provider.MediaStore; 8 import android.app.Activity; 9 import android.content.Intent;10 import android.view.Menu;11 import android.view.View;12 import android.view.View.OnClickListener;13 import android.widget.Button;14 import android.media.*;15 16 public class MainActivity extends Activity {17     private Button button;18     19 20     @Override21     protected void onCreate(Bundle savedInstanceState) {22         super.onCreate(savedInstanceState);23         setContentView(R.layout.activity_main);24         25         button=(Button)findViewById(R.id.button1);26         button.setOnClickListener(new View.OnClickListener() {27             28             @Override29             public void onClick(View v) {30                 // TODO 自动生成的方法存根31                 Intent intent=new Intent();32                 intent.setAction("android.media.action.IMAGE_CAPTURE");33                 intent.addCategory("android.intent.category.DEFAULT");34                 File file=new File("/sdcard/0000image.jpg");35                 Uri uri=Uri.fromFile(file);36                 intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);37                 startActivity(intent);38             }39         });40         41     }42 43     @Override44     public boolean onCreateOptionsMenu(Menu menu) {45         // Inflate the menu; this adds items to the action bar if it is present.46         getMenuInflater().inflate(R.menu.main, menu);47         return true;48     }49 }

2.activity_main.xml布局文件

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="wrap_content" 5     android:paddingBottom="@dimen/activity_vertical_margin" 6     android:paddingLeft="@dimen/activity_horizontal_margin" 7     android:paddingRight="@dimen/activity_horizontal_margin" 8     android:paddingTop="@dimen/activity_vertical_margin" 9     tools:context=".MainActivity" >10 11     <Button12         android:id="@+id/button1"13         android:layout_width="match_parent"14         android:layout_height="wrap_content"15         android:layout_alignParentLeft="true"16         android:layout_alignParentTop="true"17         android:layout_marginLeft="73dp"18         android:text="拍照" />19    20 RelativeLayout>

3.AndroidManifest.xml文件

 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3     package="com.example.takephoto" 4     android:versionCode="1" 5     android:versionName="1.0" > 6  7     <uses-sdk 8         android:minSdkVersion="8" 9         android:targetSdkVersion="18" />10 11     <application12         android:allowBackup="true"13         android:icon="@drawable/ic_launcher"14         android:label="@string/app_name"15         android:theme="@style/AppTheme" >16         <activity17             android:name="com.example.takephoto.MainActivity"18             android:label="@string/app_name" >19             <intent-filter>20                 <action android:name="android.intent.action.MAIN" />21 22                 <category android:name="android.intent.category.LAUNCHER" />23             intent-filter>24         activity>25     application>26 27 manifest>

4.注:因为是调用的系统摄像头进行拍照,系统相机可以自由获取本地文件的存储权限,所以无需在声明权限。

二、Building a Camera App

1.MainActivity.java文件

  1 package com.example.takemyphoto;  2   3 import java.io.File;  4 import java.io.FileNotFoundException;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7   8 import android.os.Bundle;  9 import android.app.Activity; 10 import android.content.Context; 11 import android.content.pm.PackageManager; 12 import android.hardware.Camera; 13 import android.hardware.Camera.AutoFocusCallback; 14 import android.hardware.Camera.PictureCallback; 15 import android.util.Log; 16 import android.view.Menu; 17 import android.view.View; 18 import android.widget.Button; 19 import android.widget.FrameLayout; 20  21 public class MainActivity extends Activity { 22     private Camera mCamera; 23     private CreamPrivew mPreview; 24  25     @Override 26     protected void onCreate(Bundle savedInstanceState) { 27         super.onCreate(savedInstanceState); 28         setContentView(R.layout.activity_main); 29          30      // Create an instance of Camera 31         mCamera = getCameraInstance(); 32  33         // Create our Preview view and set it as the content of our activity. 34         mPreview = new CreamPrivew(this, mCamera); 35         FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 36         preview.addView(mPreview); 37          38      // Add a listener to the Capture button 39         Button captureButton = (Button) findViewById(R.id.button_capture); 40         captureButton.setOnClickListener( 41             new View.OnClickListener() { 42                 @Override 43                 public void onClick(View v) { 44                     // get an image from the camera 45                     mCamera.autoFocus(new AutoFocusCallback(){ 46  47                         @Override 48                         public void onAutoFocus(boolean succeed, Camera camera) { 49                             // TODO 自动生成的方法存根 50                             mCamera.takePicture(null, null, mPicture); 51                         } 52                          53                     }); 54                      55                 } 56             } 57         ); 58          59     } 60     61          62         /** Check if this device has a camera */ 63         private boolean checkCameraHardware(Context context) { 64             if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ 65                 // this device has a camera 66                 return true; 67             } else { 68                 // no camera on this device 69                 return false; 70             } 71         } 72         /** A safe way to get an instance of the Camera object. */ 73         public static Camera getCameraInstance(){ 74             Camera c = null; 75             try { 76                 c = Camera.open(); // attempt to get a Camera instance,api9之后支持(1),打开前置摄像机 77             } 78             catch (Exception e){ 79                 // Camera is not available (in use or does not exist) 80             } 81             return c; // returns null if camera is unavailable 82         } 83     84  85  86     @Override 87     public boolean onCreateOptionsMenu(Menu menu) { 88         // Inflate the menu; this adds items to the action bar if it is present. 89         getMenuInflater().inflate(R.menu.main, menu); 90         return true; 91     } 92     private PictureCallback mPicture = new PictureCallback() { 93  94         @Override 95         public void onPictureTaken(byte[] data, Camera camera) { 96  97             File pictureFile = new File("/scard/"+System.currentTimeMillis()+".jpg"); 98  99             try {100                 FileOutputStream fos = new FileOutputStream(pictureFile);101                 fos.write(data);102                 fos.close();103             } catch (FileNotFoundException e) {104                 Log.d("TAG", "File not found: " + e.getMessage());105             } catch (IOException e) {106                 Log.d("TAG", "Error accessing file: " + e.getMessage());107             }108         }109     };110     public void onDestory(){111         if(mCamera!=null){112             mCamera.release();113             mCamera=null;114             115         }116     }117 }

2.CreamPrivew.java文件

 1 package com.example.takemyphoto; 2  3 import java.io.IOException; 4  5 import android.content.Context; 6 import android.hardware.Camera; 7 import android.util.Log; 8 import android.view.SurfaceHolder; 9 import android.view.SurfaceView;10 11 public class CreamPrivew extends SurfaceView implements SurfaceHolder.Callback {12     /** A basic Camera preview class */13         private SurfaceHolder mHolder;14         private Camera mCamera;15 16         public CreamPrivew(Context context, Camera camera) {17             super(context);18             mCamera = camera;19 20             // Install a SurfaceHolder.Callback so we get notified when the21             // underlying surface is created and destroyed.22             mHolder = getHolder();23             mHolder.addCallback(this);24             // deprecated setting, but required on Android versions prior to 3.025             mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);26         }27 28         public void surfaceCreated(SurfaceHolder holder) {29             // The Surface has been created, now tell the camera where to draw the preview.30             try {31                 mCamera.setPreviewDisplay(holder);32                 mCamera.startPreview();33             } catch (IOException e) {34                 Log.d(VIEW_LOG_TAG, "Error setting camera preview: " + e.getMessage());35             }36         }37 38         public void surfaceDestroyed(SurfaceHolder holder) {39             // empty. Take care of releasing the Camera preview in your activity.40         }41 42         public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {43             // If your preview can change or rotate, take care of those events here.44             // Make sure to stop the preview before resizing or reformatting it.45 46             if (mHolder.getSurface() == null){47               // preview surface does not exist48               return;49             }50 51             // stop preview before making changes52             try {53                 mCamera.stopPreview();54             } catch (Exception e){55               // ignore: tried to stop a non-existent preview56             }57 58             // set preview size and make any resize, rotate or59             // reformatting changes here60 61             // start preview with new settings62             try {63                 mCamera.setPreviewDisplay(mHolder);64                 mCamera.startPreview();65 66             } catch (Exception e){67                 Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());68             }69         }70         }

3.activity_main.xml布局文件

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3      android:layout_width="fill_parent" 4     android:layout_height="fill_parent"   5     android:orientation="horizontal" 6     tools:context=".MainActivity" > 7     <FrameLayout 8     android:id="@+id/camera_preview" 9     android:layout_width="fill_parent"10     android:layout_height="fill_parent"11     android:layout_weight="1"12     />13 14   <Button15     android:id="@+id/button_capture"16     android:text="Capture"17     android:layout_width="wrap_content"18     android:layout_height="wrap_content"19     android:layout_gravity="center"20     />21   22 23 LinearLayout>

 

4.AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3     package="com.example.takemyphoto" 4     android:versionCode="1" 5     android:versionName="1.0" > 6     <uses-permission android:name="android.permission.CAMERA" /> 7     <uses-feature android:name="android.hardware.camera" /> 8     <uses-feature android:name="android.hardware.camera" android:required="false" /> 9     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />10     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />11 12     <uses-sdk13         android:minSdkVersion="8"14         android:targetSdkVersion="18" />15 16     <application17         android:allowBackup="true"18         android:icon="@drawable/ic_launcher"19         android:label="@string/app_name"20         android:theme="@style/AppTheme" >21         <activity22             android:name="com.example.takemyphoto.MainActivity"23             android:label="@string/app_name" 24              android:screenOrientation="landscape">25             <intent-filter>26                 <action android:name="android.intent.action.MAIN" />27 28                 <category android:name="android.intent.category.LAUNCHER" />29             intent-filter>30         activity>31     application>32 33 manifest>

     相关API网址:http://developer.android.com/guide/topics/media/camera.html

 

转载于:https://www.cnblogs.com/chance88/p/4803155.html

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android webview 使用js加载json文件失败
  4. eclipse中使用RecyclerView报错:Error inflating class android.s
  5. Android中调用天气预报
  6. [mark]Android(安卓)aapt工具
  7. Android(安卓)getResources的作用和需要注意点
  8. android style的使用
  9. Android(安卓)studio 导入github工程

随机推荐

  1. 搞定个性化输入提示--自定义AutoComplete
  2. [译] C++ 和 Android(安卓)本地 Activity
  3. Android学习笔记八:基本视图组件:CheckBox
  4. Android中webview和js之间的交互
  5. android MTK平台编译UBOOT学习笔记
  6. Android——Fragment介绍及两种基本使用
  7. android apk反编译(反编译—改代码—再编
  8. Android(安卓)ApiDemo学习——AutoComple
  9. Android软件开发之常用系统控件界面大合
  10. Android(安卓)ApiDemos示例解析(66):Grap