使用EXTRA_OUTPUT进行ACTION_VIDEO_CAPTURE意图会导致相机应用程序崩溃

时间:2013-08-30 18:17:55

标签: android android-intent android-camera

代码

String dirPath = File.separator + "Android" + File.separator + "data" + File.separator + context.getPackageName() + File.separator + "mediaDir" + File.separator;

// Path where I want the recorded video to be placed.
File videoFile = new File(Environment.getExternalStorageDirectory() + dirPath + "videoName.mp4"); 

Uri videoFileUri = Uri.fromFile(videoFile); 
intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoFileUri);

startActivityForResult(intent, VIDEO_CAPTURE_CODE);

LogCat输出

A/StagefrightRecorder(11209): frameworks/base/media/libmediaplayerservice/StagefrightRecorder.cpp:636 mOutputFd >= 0**
...
<A very long memory dump>
...
W/Camera(18796): ICamera died
...
E/Camera(18796): Error 100

HTC Nexus One手机中会出现此错误,而Nexus 7等较新设备则不会出现此问题。好像是this bug,HTC,摩托罗拉等多家设备制造商重新实施了camara应用,重新引入了使用EXTRA_OUTPUT修复的错误。

有没有办法在Nexus One等设备中正常使用? (除了不使用EXTRA_OUTPUT然后在收到onActivityResult时将文件复制到所需目的地)

注意: 我已经使用createNewFilemkdirs尝试了几项确保目标文件存在的事情。

更新 更新了代码以显示文件的放置位置。

1 个答案:

答案 0 :(得分:0)

永远不要使用字符串连接来构建文件路径。请使用正确的File构造函数。

除此之外,Play商店中有数千个相机应用程序,更不用说在设备上了。用户可以选择其中任何一个来处理您的请求。虽然理想情况下所有人都会尊重EXTRA_OUTPUT,但没有人会对这些应用程序开发者的头部持枪,迫使他们这样做。因此,使用ACTION_VIDEO_CAPTURE应该被视为“尽力而为”的方法,仅对偶然情况有用,如果第三方应用程序行为不当,那不是问题。