![Android Camera開發(fā)(一)之基礎(chǔ)知識_第1頁](http://file4.renrendoc.com/view/abb267df89844eff5effc42888105fab/abb267df89844eff5effc42888105fab1.gif)
![Android Camera開發(fā)(一)之基礎(chǔ)知識_第2頁](http://file4.renrendoc.com/view/abb267df89844eff5effc42888105fab/abb267df89844eff5effc42888105fab2.gif)
![Android Camera開發(fā)(一)之基礎(chǔ)知識_第3頁](http://file4.renrendoc.com/view/abb267df89844eff5effc42888105fab/abb267df89844eff5effc42888105fab3.gif)
![Android Camera開發(fā)(一)之基礎(chǔ)知識_第4頁](http://file4.renrendoc.com/view/abb267df89844eff5effc42888105fab/abb267df89844eff5effc42888105fab4.gif)
![Android Camera開發(fā)(一)之基礎(chǔ)知識_第5頁](http://file4.renrendoc.com/view/abb267df89844eff5effc42888105fab/abb267df89844eff5effc42888105fab5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
AndroidCamera開發(fā)(一)之基礎(chǔ)知識概述Android手機關(guān)于Camera的使用,一是拍照,二是攝像,由于Android提供了強大的組件功能,為此對于在Android手機系統(tǒng)上進行Camera的開發(fā),我們可以使用兩類方法:一是借助Intent和MediaStore調(diào)用系統(tǒng)CameraApp程序來實現(xiàn)拍照和攝像功能,二是根據(jù)CameraAPI自寫Camera程序?;A(chǔ)知識Android系統(tǒng)提供API來支持自定義相機拍照和系統(tǒng)拍照,以下是有關(guān)的類:Camera該類提供基礎(chǔ)API來使用設(shè)備上的相機,且該類可以為你的應用提供拍照和錄像相關(guān)的API。SurfaceView該類用于顯示相機的預覽數(shù)據(jù)。如果你對SurfaceView還不熟悉,請參考AndroidSurfaceView的使用這篇文章。MediaRecorder該類提供相機錄像相關(guān)的API。注意事項在你的應用程序能夠在Android設(shè)備上使用相機之前,你應該考慮幾個問題,那就是你的App打算如何使用相機拍照或者錄像?Camera需求的聲明:使用相機功能對于你的應用程序來說是否很重要并且你不希望你的應用程序被安裝在沒有相機的機器上?如果是這樣,那么你需要把相機需求聲明在配置文件里。調(diào)用系統(tǒng)拍照還是自定義相機:你的應用程序該如何使用相機?你是否僅僅需要拍攝一張照片或者一個視頻,或者你的應用程序希望提供一種使用相機的新的方式?存儲:是否你的應用生成的圖片和視頻僅對你的應用可見,還是其他應用程序例如相冊或者其他的多媒體和社交App也可以使用它們?你是否希望你的應用程序被卸載后,這些照片和視頻仍然可用,還是一起被刪除?權(quán)限申明CameraPermission-你的應用必須申請相機權(quán)限才可以使用設(shè)備相機。<uses-permissionandroid:name="android.permission.CAMERA"/>注意:如果你使用Intent調(diào)用系統(tǒng)相機,你的應用無需申請該權(quán)限。StoragePermission-如果你的應用需要保存照片或者視頻到設(shè)備存儲中,你必須在Manifest指定文件的寫權(quán)限<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>AudioRecordingPermission-你必須申請錄音權(quán)限才能使用相機來錄像.<uses-permissionandroid:name="android.permission.RECORD_AUDIO"/>LocationPermission-當然如果你需要拍攝的照片記錄地理位置,你同樣需要申請如下權(quán)限<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>調(diào)用系統(tǒng)相機你的應用可以通過發(fā)送一個Intent到系統(tǒng)相機應用來實現(xiàn)抓取一張照片或者一段視頻剪輯,然后將它們返回給你的應用。使用cameraintent調(diào)用系統(tǒng)相機流程如下:(1)ComposeaCameraIntent-創(chuàng)建一個Intent請求用來拍照或者錄像,有關(guān)的Intent類型如下:MediaStore.ACTION_IMAGE_CAPTURE-該Intentaction類型用于請求系統(tǒng)相機拍照。MediaStore.ACTION_VIDEO_CAPTURE-該Intentaction類型用于請求系統(tǒng)相機錄像。(2)StarttheCameraIntent-調(diào)用activity的startActivityForResult()方法來發(fā)送cameraintent請求拍照或者錄像,當發(fā)送cameraintent以后,當前應用會跳轉(zhuǎn)到系統(tǒng)相機應用app界面,讓用戶可以拍照或者錄像。(3)ReceivetheIntentResult-在你的應用中實現(xiàn)onActivityResult()回調(diào)方法去接收來自系統(tǒng)相機的拍攝結(jié)果。該方法在用戶完成拍照或者錄像以后由系統(tǒng)調(diào)用。系統(tǒng)拍照代碼如下,按上面的三步走:button1.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);}});...@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);/***通過data取得數(shù)據(jù)*/if(requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){Bundleextras=data.getExtras();Bitmapbitmap=(Bitmap)extras.get("data");image.setImageBitmap(bitmap);}}但是,現(xiàn)在手機像素這么高,萬一圖片特別大呢,會不會data過大而FC呢?放心,Android早就考慮到了,所以,data里面壓根就不是完整的圖片,它只是一張縮略圖。所以,我們需要獲取到拍攝的原圖,就不能使用這種方法。但是我們可以這樣做,我們可以指定MediaStore類的一個EXTRA_OUTPUT來指定拍攝圖像保存的位置,相當于建立一個臨時文件。在onActivityResult中,我們不使用data來獲取圖像,而是直接去讀這個臨時文件即可。如果自己代碼指定了保存圖片的uri,data里面就不會保存數(shù)據(jù)。button1.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);UrifileUri=getOutputMediaFileUri(MEDIA_TYPE_IMAGE);intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);startActivityForResult(intent,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);}});...@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){/***通過存儲Uri取得數(shù)據(jù)*/if(requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){if(resultCode==RESULT_OK){image.setImageURI(getOutputMediaFileUri(MEDIA_TYPE_IMAGE));}}}這樣我們就可以獲取到完整的拍攝圖片了。后面你可以讓圖像顯示出來。下面來看看保存多媒體文件:拍照或者錄像生成的多媒體文件需要保存到手機存儲目錄中(SDCard),所以在應用中必須有往手機中寫文件的權(quán)限。一般可以有多種本地路徑來保存多媒體文件,但是主要有如下兩種常用的路徑:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)該方法返回一個標準的外部存儲路徑去保存照片和視頻。這個路徑是公共的,所以其他應用也可以訪問,修改,刪除該路徑下的照片和視頻,如果你的應用被卸載了,媒體文件依然存在本地儲存中。為了避免和其他多媒體文件混淆,你應該在公共目錄下創(chuàng)建一個子目錄來保存你自己應用中的多媒體數(shù)據(jù)。Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)該方法返回一個標準的,唯獨當前應用自己可見的路徑去保存照片和視頻。如果該應用被卸載,在該目錄下的所有多媒體數(shù)據(jù)將會被移除。但是有一個好處就是其他應用無法去訪問,修改,刪除該路徑下的文件。如下示例代碼演示如何創(chuàng)建一個路徑用來保存照片和視頻:publicstaticfinalintMEDIA_TYPE_IMAGE=1;publicstaticfinalintMEDIA_TYPE_VIDEO=2;/**CreateafileUriforsavinganimageorvideo*/privatestaticUrigetOutputMediaFileUri(inttype){returnUri.fromFile(getOutputMediaFile(type));}/**CreateaFileforsavinganimageorvideo*/privatestaticFilegetOutputMediaFile(inttype){FilemediaStorageDir=newFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"WatsonCamera");if(!mediaStorageDir.exists()){if(!mediaStorageDir.mkdirs()){returnnull;}}FilemediaFile;if(type==MEDIA_TYPE_IMAGE){mediaFile=newFile(mediaStorageDir.getPath()+File.separator+"IMG_watson.jpg");}elseif(type==MEDIA_TYPE_VIDEO){mediaFile=newFile(mediaStorageDir.getPath()+File.separator+"VID_watson.mp4");}else{returnnull;}returnmediaFile;}系統(tǒng)錄像發(fā)送Intent錄像攜帶的外部數(shù)據(jù)extra的信息如下:MediaStore.EXTRA_OUTPUT該關(guān)鍵字和拍照使用的關(guān)鍵字一樣,意思就是制定一個路徑和文件名來構(gòu)建一個Uri對象來保存錄像結(jié)果。MediaStore.EXTRA_VIDEO_QUALITY該關(guān)鍵字用于指定拍攝的錄像質(zhì)量,參數(shù)0表示低質(zhì)量,參數(shù)1表示高質(zhì)量。MediaStore.EXTRA_DURATION_LIMIT該關(guān)鍵之用于指定拍攝的錄像的時間限制,單位是秒。MediaStore.EXTRA_SIZE_LIMIT該關(guān)鍵字用于指定拍攝的錄像文件大小限制,單位值byte。代碼如下,按上面的三步走:button2.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(MediaStore.ACTION_VIDEO_CAPTURE);UrifileUri=getOutputMediaFileUri(MEDIA_TYPE_VIDEO);intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);startActivityForResult(intent,CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);}});...@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE){if(resultCode==RESULT_OK){image.setVisibility(View.VISIBLE);video.setVisibility(View.GONE);image.setImageURI(getOutputMediaFileUri(MEDIA_TYPE_IMAGE));}}elseif(requestCode==CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE){if(resultCode==RESULT_OK){video.setVisibility(View.VISIBLE);image.setVisibility(View.GONE);video.setVideoURI(getOutputMediaFileUri(MEDIA_TYPE_VIDEO));video.setOnPreparedListener(newMediaPlayer.OnPreparedListener(){@OverridepublicvoidonPrepared(MediaPlayermp){video.start();}});video.setOnCompletionListener(newMediaPlayer.OnCompletionListener(){@OverridepublicvoidonCompletion(MediaPlayermp){if(null!=video){video.stopPlayback();}}});}}}自定義相機創(chuàng)建一個自定義的相機app基本遵循如下步驟:檢測和訪問相機:首先代碼檢測該設(shè)備相機是否存在,如果存在才能請求訪問設(shè)備相機。創(chuàng)建一個預覽來顯示相機圖像:在你的布局中使用SurfaceView控件,然后在代碼中繼承SurfaceHolder.Callback接口并且實現(xiàn)接口中的方法來顯示來自相機的圖像信息。設(shè)置相機基本參數(shù):根據(jù)需求設(shè)置相機預覽尺寸,圖片大小,預覽方向,圖片方向等。設(shè)置拍照錄像監(jiān)聽:當用戶按下按鈕時調(diào)用Camera.takePicture()或者MediaRecorder.start()來進行拍照或錄像。文件保存:當拍照結(jié)束或者錄像視頻結(jié)束時,需要開啟一個后臺線程去保存圖片或者視頻文件。釋放相機資源:Camera硬件是一個共享資源,所以你必須小心的編寫你的應用代碼來管理相機資源。一般在Activity的生命周期的onResume中開啟相機,在onPause中釋放相機。注意:當你不在使用相機資源時,記得調(diào)用Camera.release()方法來釋放相機資源,否則其他應用甚至你自己的應用再次請求訪問設(shè)備相機時會失敗,并且crash。檢測相機硬件是否存在一般情況,我們會在運行代碼時檢測該設(shè)備是否有相機硬件,如果有相機硬件,才進一步去訪問相機,如下是檢測相機硬件是否存在是代碼示例:/**Checkifthisdevicehasacamera*/privatebooleancheckCameraHardware(Contextcontext){if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){returntrue;}else{returnfalse;}}Android設(shè)備可以有多個相機硬件,現(xiàn)在一般手機都是前后兩個camera,因此我們在Android2.3以后也可以使用Camera.getNumberOfCameras()方法來獲得當前設(shè)備camera個數(shù)來判斷相機硬件是否存在。創(chuàng)建Camera預覽Camera預覽布局文件:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/record_navigation_bar"android:layout_width="match_parent"android:layout_height="48dp"android:background="#F8F8F8"><ImageViewandroid:id="@+id/record_act_back"android:layout_width="25dp"android:layout_height="31dp"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:src="@drawable/icon_ll_back"/></RelativeLayout><SurfaceViewandroid:id="@+id/camera_preview"android:layout_width="match_parent"android:layout_height="fill_parent"android:layout_above="@+id/record_bottom_bar"android:layout_below="@+id/record_navigation_bar"/><RelativeLayoutandroid:id="@+id/record_bottom_bar"android:layout_width="match_parent"android:layout_height="60dp"android:layout_alignParentBottom="true"android:background="@drawable/recording_bottom_bar_bg_interview"><Buttonandroid:id="@+id/btn_start_recording"android:layout_width="58dp"android:layout_height="58dp"android:layout_centerInParent="true"android:background="@drawable/recording_act_vedio_start"/><Buttonandroid:id="@+id/btn_change_module"android:layout_width="45dp"android:layout_height="35dp"android:layout_centerVertical="true"android:layout_marginLeft="30dp"android:background="@drawable/change_module_photo"/></RelativeLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="30dp"android:layout_alignParentRight="true"android:layout_below="@+id/record_navigation_bar"android:layout_marginRight="10dp"android:layout_marginTop="10dp"android:gravity="center_vertical"><Viewandroid:id="@+id/record_video_tip"android:layout_width="15dp"android:layout_height="15dp"android:layout_marginRight="10dp"android:background="@drawable/record_video_tip"/><TextViewandroid:id="@+id/record_video_time"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginRight="10dp"android:gravity="center_vertical"android:text="00:00"android:textColor="@android:color/white"android:textSize="17sp"/></LinearLayout></RelativeLayout>然后,我們創(chuàng)建一個Activity,用來展示Camera的預覽,那么在這個Activity里面,我們需要做什么呢?兩件事情:初始化相機將內(nèi)容顯示到SurfaceViewAndroid的Camera是獨享的,如果多處調(diào)用,就會拋出異常,所以,我們需要將Camera的生命周期與SurfaceView的生命周期綁定:surfaceCreated方法中初始化相機surfaceDestroyed方法中釋放相機初始化相機非常簡單:privateCameragetCamera(){Cameracamera;try{camera=Camera.open();}catch(Exceptione){camera=null;}returncamera;}注意:在調(diào)用Camera.open()方法時總是要去捕獲一個異常,以免打開相機設(shè)備失敗導致整個應用crash。在Android2.3以及更高api上,你可以使用Camera.open(int)來打開指定的相機。以上代碼示例總是默認打開后置camera,一般情況參數(shù)為0表示打開后置camera,參數(shù)為1表示打開前置camera。釋放相機也非常簡單:@OverridepublicvoidsurfaceDestroyed(SurfaceHolderholder){if(camera!=null){try{camera.setPreviewCallback(null);camera.stopPreview();camera.release();camera=null;}catch(Exceptione){e.printStackTrace();}}}那么下面我們再來看如何把相機圖像設(shè)置到SurfaceView中進行預覽:@OverridepublicvoidsurfaceCreated(SurfaceHolderholder){try{camera=getCamera();camera.setPreviewDisplay(holder);//camera關(guān)聯(lián)到SurfaceViewcamera.setDisplayOrientation(90);//旋轉(zhuǎn)90度camera.startPreview();//開始預覽}catch(Exceptione){finish();}}是不是也非常簡單,camera的一個方法已經(jīng)幫我們自動關(guān)聯(lián)了SurfaceView。這里需要注意下這個方法camera.setDisplayOrientation(90),通過這個方法,我們可以調(diào)整攝像頭的角度,不然默認是橫屏,圖像會顯示的比較奇怪。當然,即使你設(shè)置了90,圖像也有可能比較奇怪,這是因為你沒有對圖像進行正確的縮放,比例不對。通過上面的設(shè)置,我們已經(jīng)可以正常預覽攝像頭的圖像內(nèi)容了。拍照一旦你創(chuàng)建了camerapreview并且加載到布局中可以實時顯示預覽畫面了,此時就可以進行拍照了。為了配合拍照,我們需要做一些設(shè)置,設(shè)置拍照參數(shù),當然你也可以不設(shè)置而使用默認參數(shù),默認參數(shù)基本上就能滿足我們的要求。Camera.Parametersparams=mCamera.getParameters();params.setPictureFormat(ImageFormat.JPEG);params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);mCamera.setParameters(params);//自動聚焦camera.autoFocus(newAutoFocusCallback(){publicvoidonAutoFocus(booleansuccess,Cameracamera){if(success)System.out.println("聚焦成功!");elseSystem.out.println("聚焦失敗!");}});在代碼中你應該實現(xiàn)一個監(jiān)聽回調(diào)來捕獲用戶拍照的行為??梢哉{(diào)用camera.takePciture()方法來進行拍照。publicfinalvoidtakePicture(ShutterCallbackshutter,PictureCallbackraw,PictureCallbackjpeg);該方法接受三個參數(shù),第一個參數(shù)ShutterCallback響應快門的接口,第二個參數(shù)PictureCallback接收raw格式的圖片數(shù)據(jù),第三個參數(shù)PictureCallback接收jpeg格式的圖片數(shù)據(jù)。為了保存圖片數(shù)據(jù),你可以根據(jù)需要實現(xiàn)以上三個接口。此處我們暫且實現(xiàn)第三個PictureCallback接口回調(diào)。示例代碼如下://拍照if(camera!=null){camera.takePicture(null,null,mPictureCallback);}//第三個PictureCallback接口回調(diào),通過data[]保持圖片數(shù)據(jù)信息privateCamera.PictureCallbackmPictureCallback=newCamera.PictureCallback(){@OverridepublicvoidonPictureTaken(byte[]data,Cameracamera){FilepictureFile=MainActivity.getOutputMediaFile(MEDIA_TYPE_IMAGE);if(pictureFile==null){return;}try{FileOutputStreamfos=newFileOutputStream(pictureFile);fos.write(ta);fos.close();}catch(Exceptione){e.printStackTrace();}Toast.makeText(RecordVedioAct.this,"圖像已保存",Toast.LENGTH_SHORT).show();camera.startPreview();//拍完繼續(xù)預覽}};錄像Camera視頻錄像不僅涉及到Camera類還用到了MediaRecorder類。當你使用Camera錄像時,你應該調(diào)用Camera.lock()和Camera.unlock()來管理camera硬件,允許MediaRecorder訪問camera硬件。你應該在camera和MediaRecorder關(guān)聯(lián)之前調(diào)用Camera.unlock()來解鎖camera,允許MediaRecorder訪問Camera,在釋放MediaRecorder資源以后調(diào)用Camera.lock()來鎖定camera以保證camera硬件資源的共享性。注:在Android4.0以后,系統(tǒng)會自動管理camera.unlock()以及camera.lock(),無需用戶自己管理。啟動錄像流程需要一個指定調(diào)用順序,如下是詳細的步驟流程:(1)OpenCamera–使用Camera.open()靜態(tài)方法來獲得camera對象實例。(2)ConnectPreview–使用camera.setPreviewDiaplay(holder)方法將相機的預覽畫面顯示在SurfaceView控件上。(3)StartPreview–使用camera.startPreview()方法開始啟動預覽畫面。(4)StartRecordingVideo–必須完成以下步驟才能正常開始正常錄音:UnlocktheCamera-調(diào)用camera.unlock()方法解鎖camera,使得MediaRecorder進程能訪問Camera硬件。ConfigureMediaRecorder-在這一步,分別調(diào)用MediaRecorder類中如下方法來配置MediaRecorder:/**配置MediaRecorder*/recorder.setCamera(camera);//設(shè)置camera用于錄像recorder.setOutputFile(filePath);//設(shè)置輸出文件路徑recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//設(shè)置錄像音頻來源recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//設(shè)置錄像視頻來源recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//設(shè)置視頻的輸出格式recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//設(shè)置視頻的編碼格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//設(shè)置音頻的編碼格式/**輸出格式和編碼格式,對于Android2.2或者更高版本使用MediaRecorder.setProfile方法即可,使用方法CamcorderProfile.get()來獲得一個配置信息*/recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));setPreviewDisplay(holder.getSurface())//為MediaRecorder指定預覽顯示注意:在這一步,你必須調(diào)用MediaRecorder類中的以上全部方法來配置MediaRecorder,否則你的應用將無法正常錄像并且報錯。由于錄像默認設(shè)置了很多參數(shù),無需用戶太關(guān)心更細節(jié)的參數(shù)設(shè)置,但是如果需要在你的應用中修改這些默認參數(shù)設(shè)置,你可以使用如下方法來修改默認參數(shù):recorder.setAudioEncodingBitRate();//設(shè)置音頻編碼的字節(jié)率recorder.setVideoEncodingBitRate();//設(shè)置視頻編碼的字節(jié)率recorder.setOrientationHint(tureAngle);//設(shè)置MediaRecorder旋轉(zhuǎn)角度recorder.setAudioSamplingRate();//設(shè)置音頻采樣率recorder.setMaxDuration(5*60*1000);//設(shè)置最大錄制時間recorder.setVideoSize(640,480);//設(shè)置視頻尺寸大小,在setVideoSource()和setOutFormat()之后recorder.setVideoFrameRate()//設(shè)置視頻幀率,在setVideoSource()和setOutFormat()之后recorder.setAudioChannels();//設(shè)置音頻的頻道數(shù)目,參數(shù)一般1/2PrepareMediaRecorder-在配置完MediaRecorder參數(shù)之后調(diào)用mediaRecorder.prepare()方法來準備MediaRecorder。StartMediaRecorder-調(diào)用mediaRecorder.start()方法啟動錄像。(5)StopRecordingVideo–當你結(jié)束錄像時調(diào)用如下方法:StopMediaRecorder-首先調(diào)用mediaRecorder.stop()方法停止多媒體錄像。ResetMediaRecorder-調(diào)用mediaRecorder.reset()方法重置多媒體狀態(tài),調(diào)用該方法之后之前的所有MediaRecorderconfiguration將被移除,你如果還想再次錄像,需要再次配置多媒體參數(shù)。ReleaseMediaRecorder-調(diào)用mediaRecorder.release()方法釋放多媒體資源。LocktheCamera-調(diào)用camera.lock()方法來給Camera硬件加鎖。在Android4.0及以后無需調(diào)用該方法,除非在調(diào)用mediaRecorder.prepare()失敗時,才需要再次調(diào)用該方法。(6)StopthePreview-當你的Activity已經(jīng)不再使用camera時,調(diào)用camera.stopPreview()方法來停止預覽。(7)ReleaseCamera-當不再使用Camera時,調(diào)用camera.release()方法來釋放camera,以便其他應用可以使用camera資源。注意:當完成一段視頻錄像時,不要馬上去釋放camera資源或者停止當前預覽,因為有可能用戶會再次啟動錄像操作。本文中將camera釋放操作放在surfaceDestroyed里面。如下代碼演示在button的點擊事件中去啟動和停止視頻錄像操作:/**錄像*/if(isRecording){stopRecord();}else{startRecord();}//開始錄像privatevoidstartRecord(){if(prepareVideoRecorder()){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年咖啡連鎖區(qū)域代理協(xié)議
- 2025年農(nóng)家樂支持性服務外包協(xié)議樣本
- 2025年撫養(yǎng)權(quán)協(xié)議策劃與溝通策略
- 2025年住宅小區(qū)物業(yè)服務合同爭議處理案例
- 2025年企業(yè)內(nèi)部合資投資協(xié)議范本
- 2025年個體經(jīng)營農(nóng)場租賃合同范本
- 2025年二手車私人貸款合同
- 2025年發(fā)電機組短期租賃合同
- 2025年合作事業(yè)年合同協(xié)議
- 2025年個人抵押貸款合同規(guī)范文本
- 化學選修4《化學反應原理》(人教版)全部完整PP課件
- 《煤礦安全規(guī)程》專家解讀(詳細版)
- 招聘面試流程sop
- 建筑公司工程財務報銷制度(精選7篇)
- 工程設(shè)計方案定案表
- 最新2022年減肥食品市場現(xiàn)狀與發(fā)展趨勢預測
- 第一章-天氣圖基本分析方法課件
- 暖氣管道安裝施工計劃
- 體育實習周記20篇
- 初二物理彈力知識要點及練習
- 復合材料成型工藝及特點
評論
0/150
提交評論