日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发:调用camera API 创建MediaRecorder

發布時間:2025/3/17 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发:调用camera API 创建MediaRecorder 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文出自 “whithin's” 博客,請務必保留此出處http://whithin.blog.51cto.com/690417/1063573


1. add ?below three permission into AndroidManifest.xml file

  • <uses-permissionandroid:name= "android.permission.CAMERA"/>

  • <uses-permissionandroid:name= "android.permission.RECORD_AUDIO"/>

  • <uses-permissionandroid:name= "android.permission.WRITE_EXTERNAL_STORAGE"/>

  • 2. get a camera instance

  • /** A safe way to get an instance of the Camera object. */

  • publicstatic Camera getCameraInstance(){

  • ? ?Camera c = null;

  • try {

  • ? ? ? ?c = Camera. open(); // attempt to get a Camera instance

  • ? ?}

  • catch (Exception e){

  • // Camera is not available (in use or does not exist)

  • ? ?}

  • return c; // returns null if camera is unavailable

  • } ?


  • 3. implement a preview for the user to preview the live p_w_picpath for the camera
  • publicclass CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

  • private SurfaceHolder mHolder;

  • private Camera mCamera;

  • ? ?String TAG="CAMERAAPI";

  • public CameraPreview(Context context, Camera camera) {

  • super(context);

  • ? ? ? ?mCamera = camera;

  • // Install a SurfaceHolder.Callback so we get notified when the

  • // underlying surface is created and destroyed.

  • ? ? ? ?mHolder = getHolder();

  • ? ? ? ?mHolder.addCallback( this);

  • // deprecated setting, but required on Android versions prior to 3.0

  • ? ? ? ?mHolder. setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

  • ? ?}

  • publicvoid surfaceCreated(SurfaceHolder holder) {

  • // The Surface has been created, now tell the camera where to draw the preview.

  • try {

  • ? ? ? ? ? ?mCamera.setPreviewDisplay(holder);

  • ? ? ? ? ? ?mCamera.startPreview();

  • ? ? ? ?} catch (IOException e) {

  • ? ? ? ? ? ?Log. d(TAG, "Error setting camera preview: " + e.getMessage());

  • ? ? ? ?}

  • ? ?}

  • publicvoid surfaceDestroyed(SurfaceHolder holder) {

  • // empty. Take care of releasing the Camera preview in your activity.

  • ? ?}

  • publicvoid surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

  • // If your preview can change or rotate, take care of those events here.

  • // Make sure to stop the preview before resizing or reformatting it.

  • if (mHolder .getSurface() == null){

  • // preview surface does not exist

  • return;

  • ? ? ? ?}

  • // stop preview before making changes

  • try {

  • ? ? ? ? ? ?mCamera.stopPreview();

  • ? ? ? ?} catch (Exception e){

  • // ignore: tried to stop a non-existent preview

  • ? ? ? ?}

  • // set preview size and make any resize, rotate or

  • // reformatting changes here

  • // start preview with new settings

  • try {

  • ? ? ? ? ? ?mCamera.setPreviewDisplay( mHolder);

  • ? ? ? ? ? ?mCamera.startPreview();

  • ? ? ? ?} catch (Exception e){

  • ? ? ? ? ? ?Log. d(TAG, "Error starting camera preview: " + e.getMessage());

  • ? ? ? ?}

  • ? ?}

  • }

  • 4.initialize MediaRecorder for video recording
  • privateboolean prepareVideoRecorder(){

  • ? ?mCamera = getCameraInstance();

  • ? ?mMediaRecorder = new MediaRecorder();

  • // Step 1: Unlock and set camera to MediaRecorder

  • ? ?mCamera.unlock();

  • ? ?mMediaRecorder.setCamera(mCamera );

  • // Step 2: Set sources

  • ? ?mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);

  • ? ?mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

  • // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)

  • ? ?mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile. QUALITY_HIGH));

  • // Step 4: Set output file

  • ? ?mMediaRecorder.setOutputFile(getOutputMediaFile( MEDIA_TYPE_VIDEO).toString());

  • // Step 5: Set the preview output

  • ? ?mMediaRecorder.setPreviewDisplay(mPreview .getHolder().getSurface());

  • // Step 6: Prepare configured MediaRecorder

  • try {

  • ? ? ? ?mMediaRecorder.prepare();

  • ? ?} catch (IllegalStateException e) {

  • ? ? ? ?Log. d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());

  • ? ? ? ?releaseMediaRecorder();

  • returnfalse ;

  • ? ?} catch (IOException e) {

  • ? ? ? ?Log. d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());

  • ? ? ? ?releaseMediaRecorder();

  • returnfalse ;

  • ? ?}

  • returntrue ;

  • }


  • 5.listen for the user operation to start or stop recording, the complete code for MediaRecorder is as below,remember to release the camera and MediaRecord when finished using it.
  • publicclass MediaRecorderActivity extends Activity {

  • publicstaticfinalint MEDIA_TYPE_IMAGE = 1;

  • publicstaticfinalint MEDIA_TYPE_VIDEO = 2;

  • private Camera mCamera;

  • private CameraPreview mPreview;

  • private MediaRecorder mMediaRecorder;

  • ? ?String TAG="CAMERAAPI";

  • boolean isRecording=false ;

  • @Override

  • publicvoid onCreate(Bundle savedInstanceState) {

  • super.onCreate(savedInstanceState);

  • ? ? ? ?setContentView(R.layout. main);

  • ? ? ? ?mCamera = getCameraInstance();

  • // ? ? ? ?// Create our Preview view and set it as the content of our activity.

  • ? ? ? ?mPreview = new CameraPreview(this, mCamera);

  • ? ? ? ?FrameLayout preview = (FrameLayout) findViewById(R.id. camera_preview);

  • ? ? ? ?preview.addView( mPreview);

  • ? ? ? ?Button captureButton = (Button) findViewById(id. button_capture);

  • ? ? ? ?captureButton.setOnClickListener( new CaptureButtonOnClickListener());

  • ? ?}

  • publicclass CaptureButtonOnClickListener implements View.OnClickListener{

  • publicvoid onClick(View v) {

  • ? ? ? ? ? ? ?Button captureButton = (Button)v;

  • if (isRecording ) {

  • // stop recording and release camera

  • ? ? ? ? ? ? ? ?mMediaRecorder.stop(); ?// stop the recording

  • ? ? ? ? ? ? ? ?releaseMediaRecorder(); // release the MediaRecorder object

  • ? ? ? ? ? ? ? ?mCamera.lock(); ? ? ? ? // take camera access back from MediaRecorder

  • // inform the user that recording has stopped

  • ? ? ? ? ? ? ? ?captureButton.setText( "Capture");

  • ? ? ? ? ? ? ? ?isRecording = false ;

  • ? ? ? ? ? ?} else {

  • try{

  • // initialize video camera

  • if (prepareVideoRecorder()) {

  • // Camera is available and unlocked, MediaRecorder is prepared,

  • // now you can start recording

  • ? ? ? ? ? ? ? ? ? ?mMediaRecorder.start();

  • // inform the user that recording has started

  • ? ? ? ? ? ? ? ? ? ?captureButton.setText( "Stop");

  • ? ? ? ? ? ? ? ? ? ?isRecording = true ;

  • ? ? ? ? ? ? ? ?} else {

  • // prepare didn't work, release the camera

  • ? ? ? ? ? ? ? ? ? ?releaseMediaRecorder();

  • // inform user

  • ? ? ? ? ? ? ? ?}

  • ? ? ? ? ? ? ?} catch(Exception ex){

  • ? ? ? ? ? ? ? ? ? ? System. out.println(ex.toString());

  • ? ? ? ? ? ? ? ? ? ? ex.printStackTrace();

  • ? ? ? ? ? ? ?}

  • ? ? ? ? ? ?}

  • ? ? ? ?} ? ? ?

  • ? ?}

  • /** A safe way to get an instance of the Camera object. */

  • publicstatic Camera getCameraInstance(){

  • ? ? ? ?Camera c = null;

  • try {

  • ? ? ? ? ? ?c = Camera. open(); // attempt to get a Camera instance

  • ? ? ? ?}

  • catch (Exception e){

  • // Camera is not available (in use or does not exist)

  • ? ? ? ?}

  • return c; // returns null if camera is unavailable

  • ? ?}

  • /** Create a File for saving an p_w_picpath or video */

  • privatestatic File getOutputMediaFile(int type){

  • // To be safe, you should check that the SDCard is mounted

  • // using Environment.getExternalStorageState() before doing this.

  • ? ? ? ? ? File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(

  • ? ? ? ? ? ? ? ? ? ? Environment. DIRECTORY_PICTURES), "MyCameraApp" );

  • // This location works best if you want the created p_w_picpaths to be shared

  • // between applications and persist after your app has been uninstalled.

  • // Create the storage directory if it does not exist

  • if (! mediaStorageDir.exists()){

  • if (! mediaStorageDir.mkdirs()){

  • ? ? ? ? ? ? ? ? ? Log. d("MyCameraApp", "failed to create directory");

  • returnnull ;

  • ? ? ? ? ? ? ? }

  • ? ? ? ? ? }

  • // Create a media file name

  • ? ? ? ? ? String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss" ).format(new Date());

  • ? ? ? ? ? File mediaFile;

  • if (type == MEDIA_TYPE_IMAGE){

  • ? ? ? ? ? ? ? mediaFile = new File(mediaStorageDir.getPath() + File.separator +

  • "IMG_"+ timeStamp + ".jpg" );

  • ? ? ? ? ? } elseif (type == MEDIA_TYPE_VIDEO) {

  • ? ? ? ? ? ? ? mediaFile = new File(mediaStorageDir.getPath() + File.separator +

  • "VID_"+ timeStamp + ".mp4" );

  • ? ? ? ? ? } else {

  • returnnull ;

  • ? ? ? ? ? }

  • return mediaFile;

  • ? ? ? }

  • @Override

  • protectedvoid onPause() {

  • super.onPause();

  • ? ? ? ? ? ? ? releaseMediaRecorder(); ? ? ? // if you are using MediaRecorder, release it first

  • ? ? ? ? ? ? ? releaseCamera(); ? ? ? ? ? ? ?// release the camera immediately on pause event

  • ? ? ? ? ? }

  • privatevoid releaseCamera(){

  • if (mCamera != null){

  • ? ? ? ? ? ? ? ? ? mCamera.release(); ? ? ? ?// release the camera for other applications

  • ? ? ? ? ? ? ? ? ? mCamera = null;

  • ? ? ? ? ? ? ? }

  • ? ? ? ? ? }

  • privatevoid releaseMediaRecorder(){

  • if (mMediaRecorder != null) {

  • ? ? ? ? ? ? ? ? ? mMediaRecorder.reset(); ? // clear recorder configuration

  • ? ? ? ? ? ? ? ? ? mMediaRecorder.release(); // release the recorder object

  • ? ? ? ? ? ? ? ? ? mMediaRecorder = null ;

  • ? ? ? ? ? ? ? ? ? mCamera.lock(); ? ? ? ? ? // lock camera for later use

  • ? ? ? ? ? ? ? }

  • ? ? ? ? ? } ? ?

  • }


  • 本文出自 “whithin's” 博客,請務必保留此出處http://whithin.blog.51cto.com/690417/1063573


    轉載于:https://blog.51cto.com/yuzuolin/1330360

    總結

    以上是生活随笔為你收集整理的Android开发:调用camera API 创建MediaRecorder的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。