0

代码

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. 似乎是这个错误,其中一些设备制造商(如 HTC、摩托罗拉等)重新实现了 camara 应用程序,重新引入了这个使用EXTRA_OUTPUT.

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

注意:我已经尝试了几件事,例如确保目标文件存在,使用createNewFileand mkdirs.

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

4

1 回答 1

1

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

除此之外,Play Store 上还有数以千计的相机应用程序,更不用说在设备上。用户可以选择其中任何一个来处理您的请求。虽然理想情况下所有人都会尊重EXTRA_OUTPUT,但没有人拿着枪指着那些应用程序开发人员的脑袋强迫他们这样做。因此,使用ACTION_VIDEO_CAPTURE应该被认为是一种“尽力而为”的方法,仅对临时情况有用,如果第三方应用程序行为不端,那不是问题。

于 2013-08-30T19:16:11.437 回答