W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:kesenhoo - 原文:http://developer.android.com/training/camera/videobasics.html
這節(jié)課會介紹如何使用已有的相機應用來錄制視頻。
假設(shè)在我們應用的所有功能當中,整合視頻只是其中的一小部分,我們想要以最簡單的方法錄制視頻,而不是重新實現(xiàn)一個攝像機組件。幸運的是,大多數(shù)Android設(shè)備已經(jīng)安裝了一個能錄制視頻的相機應用。在本節(jié)課當中,我們將會讓它為我們完成這一任務。
為了讓用戶知道我們的應用依賴照相機,在Manifest清單文件中添加<uses-feature>
標簽:
<manifest ... >
<uses-feature android:name="android.hardware.camera"
android:required="true" />
...
</manifest>
如果應用使用相機,但相機并不是應用正常運行所必不可少的組件,可以將android:required
設(shè)置為"false"
。這樣的話,Google Play 也會允許沒有相機的設(shè)備下載該應用。當然我們有必要在使用相機之前通過調(diào)用hasSystemFeature(PackageManager.FEATURE_CAMERA)方法來檢查設(shè)備上是否有相機。如果沒有,那么和相機相關(guān)的功能應該禁用!
利用一個描述了執(zhí)行目的的Intent對象,Android可以將某些執(zhí)行任務委托給其他應用。整個過程包含三部分: Intent 本身,一個函數(shù)調(diào)用來啟動外部的 Activity,當焦點返回到Activity時,處理返回圖像數(shù)據(jù)的代碼。
下面的函數(shù)將會發(fā)送一個Intent來錄制視頻
static final int REQUEST_VIDEO_CAPTURE = 1;
private void dispatchTakeVideoIntent() {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
}
注意在調(diào)用startActivityForResult()方法之前,先調(diào)用resolveActivity(),這個方法會返回能處理該Intent的第一個Activity(譯注:即檢查有沒有能處理這個Intent的Activity)。執(zhí)行這個檢查非常重要,因為如果在調(diào)用startActivityForResult()時,沒有應用能處理你的Intent,應用將會崩潰。所以只要返回結(jié)果不為null,使用該Intent就是安全的。
Android的相機程序會把指向視頻存儲地址的Uri添加到Intent中,并傳送給onActivityResult()方法。下面的代碼獲取該視頻并顯示到一個VideoView當中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
Uri videoUri = intent.getData();
mVideoView.setVideoURI(videoUri);
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: