我有一只猪在我的应用程序中创建基本的视频捕获功能。我想调用我的设备的默认视频捕获工具,并将文件保存到特定位置。
从文档中可以通过在EXTRA_OUTPUT中提供Uri来实现,但是发生的事情是完全被忽略并且视频实际上被写入通常的媒体商店位置。
我的代码非常简单:
Intent i = new Intent( android.provider.MediaStore.ACTION_VIDEO_CAPTURE );
String SD_CARD_TEMP = Environment.getExternalStorageDirectory()
+ File.separator + MEDIA_TEMP ;
i.putExtra( android.provider.MediaStore.EXTRA_OUTPUT, Uri.parse(SD_CARD_TEMP) );
startActivityForResult( i, ACTIVITY_CAPTURE_VIDEO );
常量MEDIA_TEMP设置为'media_temp'。我也尝试过使用File而不是字符串并使用Uri.fromFile(),但没有区别。
如果有人有任何想法,为什么这个代码不像文档所说的那样应该......请告诉我: - )
PS。开发正在HTC Desire HD上进行,而不是模拟器..
谢谢,
戴夫
答案 0 :(得分:6)
花了13个小时试图弄清楚这个相机API发生了什么......
我正在使用相机意图和EXTRA_OUTPUT来指定保存文件的位置,并且它被忽略了!
此应用程序已在几周前运行,并且当时没有发生操作系统升级。
我可能已经找到了问题的根源:
如果手机上安装了与相机API交互或截取相机API的应用程序,某些API可能会中断!
我在经过13个小时的调试马拉松之后发现了这一点,尝试了所有可能的API组合,并遵循了有关stackoverflow的所有建议。
我的手拿着电话累了,所以我用衣架里的电话架把电话固定在我的桌子上,镜头指着一罐花生酱。
幸运的是,当我用我的花生酱照片进行调试时,谷歌护目镜应用程序弹出一个通知,说它“已经认出”了一些东西 在我的形象!
这促使我立即卸载谷歌护目镜,突然之间,图像开始像以前一样保存到我的自定义Uri !!!
这是在三星平流层。
答案 1 :(得分:3)
我有同样的问题。它适用于Android手机,但不适用于HTC或SonyEricsson设备。
好像他们的cam-app的行为与默认行为不同。
我认为唯一的可能性是向媒体提供商询问最新录制的视频并从中获取路径。然后将文件复制到您自己的目录并从媒体提供程序中删除它。
不是很聪明且容易出错,但可能是唯一的方法。
有人有更好的主意吗?
答案 2 :(得分:1)
我在nexus上做了类似的事情并且它有效,但是相同的代码对htc aria不起作用。所以它可能与实际在不同设备上运行的活动有关,如果它们是否尊重该参数。