最近在做視頻錄制上傳,調用的是系統的相機。
在做之前查了一些資料,發現好多人遇到保存到指定目錄不成功的現象。自己寫的時候就注意這些,最后發現他們遇到的問題我這邊根本沒有。可能是他們寫法有問題吧。
下邊是代碼:
啟動的時候設置,
note: 偶爾發現一個bug,在nexus4上邊如果不設置
MediaStore.EXTRA_OUTPUT 這個屬性,在onActivityResult中對結果進行處理的時候intent是null;
Intent captureImageCamera = new Intent( MediaStore.ACTION_VIDEO_CAPTURE); Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); captureImageCamera.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); //指定要保存的位置。 //captureImageCamera.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, ); //設置拍攝的質量 captureImageCamera.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60); //限制持續時長 activity.startActivityForResult(captureImageCamera, KEY_REQUEST_VIDEO, lisenter);
這樣設置就能將拍攝的視頻保存到指定目錄。
getOutputMediaFileUri這個方法請移步到http://developer.android.com/guide/topics/media/camera.html#intent-receive
如果用上邊的方法出現不能保存的情況,可以在onActivityResult中嘗試以下方式解決
try { AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(data.getData(), "r"); FileInputStream fis = videoAsset.createInputStream(); File tmpFile = new File(Environment.getExternalStorageDirectory(),"VideoFile.mp4"); FileOutputStream fos = new FileOutputStream(tmpFile); byte[] buf = new byte[1024]; int len; while ((len = fis.read(buf)) > 0) { fos.write(buf, 0, len); } fis.close(); fos.close(); } catch (IOException io_e) { // TODO: handle error }