1 package com.example.day19_04simplecamera; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.View; 7 8 public class MainActivity extends Activity { 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main); 14 } 15 16 public void takephoto(View v){ 17 Intent intent = new Intent(); 18 intent.setClass(this, TakePhoto.class); 19 startActivity(intent); 20 21 } 22 23 public void takevideo(View v){ 24 Intent intent = new Intent(); 25 intent.setClass(this, TakeVideo.class); 26 startActivity(intent); 27 } 28 }
1 package com.example.day19_04simplecamera; 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.app.Activity; 9 import android.graphics.Bitmap; 10 import android.graphics.BitmapFactory; 11 import android.graphics.Bitmap.CompressFormat; 12 import android.hardware.Camera; 13 import android.hardware.Camera.AutoFocusCallback; 14 import android.hardware.Camera.Parameters; 15 import android.hardware.Camera.PictureCallback; 16 import android.os.Bundle; 17 import android.view.SurfaceHolder; 18 import android.view.SurfaceHolder.Callback; 19 import android.view.SurfaceView; 20 import android.view.View; 21 import android.widget.Toast; 22 23 public class TakePhoto extends Activity{ 24 private Camera camera; 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 // TODO Auto-generated method stub 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.takephoto); 30 31 SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sf_photo); 32 SurfaceHolder holder = surfaceView.getHolder(); 33 34 holder.addCallback(new Callback() { 35 @Override 36 public void surfaceCreated(SurfaceHolder holder) { 37 System.out.println("TakePhoto.onCreate(...).new Callback() {...}.surfaceCreated()"); 38 camera = Camera.open(); 39 try { 40 camera.setPreviewDisplay(holder); 41 camera.startPreview(); 42 } catch (IOException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } 46 } 47 48 @Override 49 public void surfaceChanged(SurfaceHolder holder, int format, int width, 50 int height) { 51 // TODO Auto-generated method stub 52 } 53 54 @Override 55 public void surfaceDestroyed(SurfaceHolder holder) { 56 // TODO Auto-generated method stub 57 System.out 58 .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceDestroyed()"); 59 camera.stopPreview(); 60 camera.release(); 61 } 62 63 }); 64 65 } 66 67 68 public void takephoto(View V){ 69 camera.autoFocus( new AutoFocusCallback() { 70 @Override 71 public void onAutoFocus(boolean success, Camera camera) { 72 // TODO Auto-generated method stub 73 //对焦完成之后,就应该拍照 74 Parameters parameters = camera.getParameters(); 75 takephotobycamera(); 76 } 77 }); 78 } 79 80 81 private void takephotobycamera(){ 82 camera.takePicture(null, null, new PictureCallback() { 83 @Override 84 public void onPictureTaken(byte[] data, Camera camera) { 85 // TODO Auto-generated method stub 86 Bitmap bitmap= BitmapFactory.decodeByteArray(data, 0, data.length); 87 FileOutputStream fos ; 88 try { 89 fos = new FileOutputStream(new File("storage/sdcard1/photo1.jpeg")); 90 boolean success=bitmap.compress(CompressFormat.JPEG, 100, fos); 91 if(success) 92 Toast.makeText(TakePhoto.this, "保存成功", 1).show(); 93 else { 94 Toast.makeText(TakePhoto.this, "保存失败", 1).show(); 95 } 96 } catch (FileNotFoundException e) { 97 // TODO Auto-generated catch block 98 e.printStackTrace(); 99 } 100 101 系统相机拍完照之后,会自动停止预览 ,启动预览 102 camera.startPreview(); 103 104 } 105 }); 106 } 107 }
1 package com.example.day19_04simplecamera; 2 3 import java.io.IOException; 4 5 import android.app.Activity; 6 import android.hardware.Camera; 7 import android.media.AudioManager; 8 import android.media.CamcorderProfile; 9 import android.media.MediaRecorder; 10 import android.media.MediaRecorder.AudioSource; 11 import android.media.MediaRecorder.VideoSource; 12 import android.os.Bundle; 13 import android.view.SurfaceHolder; 14 import android.view.SurfaceView; 15 import android.view.View; 16 import android.view.SurfaceHolder.Callback; 17 18 public class TakeVideo extends Activity { 19 private Camera camera; 20 private SurfaceHolder holder; 21 private MediaRecorder mediaRecorder; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 // TODO Auto-generated method stub 26 super.onCreate(savedInstanceState); 27 setContentView(R.layout.takevideo); 28 29 SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sf_photo); 30 holder = surfaceView.getHolder(); 31 32 holder.addCallback(new Callback() { 33 34 @Override 35 public void surfaceCreated(SurfaceHolder holder) { 36 System.out 37 .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceCreated()"); 38 camera = Camera.open(); 39 try { 40 camera.setPreviewDisplay(holder); 41 camera.startPreview(); 42 } catch (IOException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } 46 } 47 48 @Override 49 public void surfaceChanged(SurfaceHolder holder, int format, int width, 50 int height) { 51 // TODO Auto-generated method stub 52 } 53 54 @Override 55 public void surfaceDestroyed(SurfaceHolder holder) { 56 // TODO Auto-generated method stub 57 System.out 58 .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceDestroyed()"); 59 camera.stopPreview(); 60 camera.release(); 61 } 62 63 }); 64 65 } 66 67 68 public void start(View v){ 69 70 //停止preview 71 camera.stopPreview(); 72 //解锁camera 73 camera.unlock(); 74 75 mediaRecorder = new MediaRecorder(); 76 //关联摄像头 77 mediaRecorder.setCamera(camera); 78 //设置音频源和视频源 79 mediaRecorder.setAudioSource( AudioSource.CAMCORDER); 80 mediaRecorder.setVideoSource(VideoSource.CAMERA); 81 82 //设置录视频的配置参数 83 CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); 84 mediaRecorder.setProfile(profile); 85 86 //设置输出到哪里 87 mediaRecorder.setOutputFile("storage/sdcard1/video.mp4"); 88 mediaRecorder.setPreviewDisplay(holder.getSurface()); 89 90 //开始录制视频 91 try { 92 mediaRecorder.prepare(); 93 } catch (IllegalStateException e) { 94 // TODO Auto-generated catch block 95 e.printStackTrace(); 96 } catch (IOException e) { 97 // TODO Auto-generated catch block 98 e.printStackTrace(); 99 } 100 mediaRecorder.start(); 101 102 } 103 104 public void stop(View v){ 105 106 if (mediaRecorder!=null) { 107 mediaRecorder.stop(); 108 mediaRecorder.release(); 109 } 110 //注:此时画面中已经没有预览了,需要重新锁定摄像头,开启预览才会有画面! 111 // 14. 锁定摄像头 112 camera.lock(); 113 // 15. 再打开摄像头的预览 114 camera.startPreview(); 115 116 117 118 } 119 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.day19_04simplecamera" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="14" 9 android:targetSdkVersion="21" /> 10 <uses-permission android:name="android.permission.CAMERA"/> 11 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 12 <uses-permission android:name="android.permission.RECORD_AUDIO"/> 13 14 <application 15 android:allowBackup="true" 16 android:icon="@drawable/ic_launcher" 17 android:label="@string/app_name" 18 android:theme="@style/AppTheme" > 19 <activity 20 android:name=".MainActivity" 21 android:label="@string/app_name" > 22 <intent-filter> 23 <action android:name="android.intent.action.MAIN" /> 24 25 <category android:name="android.intent.category.LAUNCHER" /> 26 </intent-filter> 27 </activity> 28 <activity android:name=".TakePhoto" 29 android:screenOrientation="landscape"></activity> 30 <activity android:name=".TakeVideo" 31 android:screenOrientation="landscape"></activity> 32 </application> 33 34 </manifest>