所以我正在尝试使用内置的相机活动来使用以下代码录制视频:
Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileURI);
videoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60);
startActivityForResult(videoIntent, VIDEO_ACTIVITY);
在调试期间,fileURI的值为:file:///mnt/sdcard/Spootur/Videos/c14e0eb2-0737-4931-9898-e85d10bab74e.mp4,videoIntent的mExtras值为:
Bundle[{output=file:///mnt/sdcard/Spootur/Videos/c14e0eb2-0737-4931-9898-e85d10bab74e.mp4, android.intent.extra.durationLimit=60}]
当我开始录制时,它会很好,但是当我重新点击录制按钮停止录制时,相机应用会抛出这个:
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CamcorderEngine.renameTempFile(CamcorderEngine.java:1352)
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CamcorderEngine.doStopVideoRecordingSync(CamcorderEngine.java:849)
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CeStateRecording.handleRequest(CeStateRecording.java:69)
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CeRequestQueue.startFirstRequest(CeRequestQueue.java:123)
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CeRequestQueue.access$200(CeRequestQueue.java:32)
05-11 01:08:11.325: E/AndroidRuntime(3748): at com.sec.android.app.camera.CeRequestQueue$MainHandler.handleMessage(CeRequestQueue.java:60)
任何可能导致此问题以及如何解决问题的想法?谢谢!
另外:我可以确认录制的视频文件位于该URI。
答案 0 :(得分:10)
实际上,我发现在某些情况下MediaStore.EXTRA_OUTPUT
无法正常工作,
另一种技巧方式是,将捕获的视频文件存储在onActivityResult()
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK)
{
try {
AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r");
FileInputStream fis = videoAsset.createInputStream();
File videoFile = new File(Environment.getExternalStorageDirectory(),"<VideoFileName>.mp4");
FileOutputStream fos = new FileOutputStream(videoFile);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fis.close();
fos.close();
} catch (IOException e) {
// TODO: handle error
}
}
}
尝试以上代码,让我知道您的成功。