我在同时访问这两个(前后摄像头)时遇到了麻烦。 当打开一个摄像头时,它可以工作。 当我先关闭然后再打开它时,它会起作用。 当我试图打开第二台摄像机而第一台摄像机仍在显示图像时,它会出现以下异常。
E/AndroidRuntime(32325): FATAL EXCEPTION: main
E/AndroidRuntime(32325): java.lang.RuntimeException: Fail to connect to camera service
E/AndroidRuntime(32325): at android.hardware.Camera.native_setup(Native Method)
E/AndroidRuntime(32325): at android.hardware.Camera.<init>(Camera.java:265)
E/AndroidRuntime(32325): at android.hardware.Camera.open(Camera.java:226)
E/AndroidRuntime(32325): at com.example.videostreamer.MainActivity$CameraHandler.start(MainActivity.java:116)
E/AndroidRuntime(32325): at com.example.videostreamer.MainActivity$2.onClick(MainActivity.java:74)
E/AndroidRuntime(32325): at android.view.View.performClick(View.java:2532)
E/AndroidRuntime(32325): at android.widget.CompoundButton.performClick(CompoundButton.java:99)
在文件中我发现了一个短语:
public static Camera open(int cameraId)
自:API等级9 创建一个新的Camera对象以访问特定的硬件摄像头。 使用完相机后必须调用release(),否则它将保留 已锁定且无法用于其他应用程序。 您的应用程序一次只能激活一个Camera对象 硬件相机。
..但我只有一个摄像头对象用于一个硬件摄像头,我想为第二个设备创建第二个对象。
答案 0 :(得分:14)
This问题基本上说它无法完成,但可能存在一些黑客攻击。 This谷歌小组缺乏回应告诉我很可能不会。 Here是Google群组中的另一篇无回复帖子。 Here是另一篇讨论同时使用两台摄像机的帖子。
所以我最初的答案是否定的,这是不可能的。但是可能有一些解决方法,你可能必须自己找到它,因为它还没有被发现:)。
编辑11/21/11:遗憾的是,我发现Sprint / HTC here官方进一步证明无法做到这一点。我意识到你正在使用Sensation,这是一款EVO 4g,但我确信它仍然适用。
答案 1 :(得分:2)
只要硬件支持,两台摄像机都可以一起启动。首先,您需要找到手机使用的特定SoC。您可以使用命令
找到它$ adb shell getprop
Chech the field [ro.board.platform],对于Nexus 6,它返回
[ro.board.platform]: [msm8084]
现在您需要检查此芯片组是否具有硬件双ISP功能。对于Qualcomm snapdragon芯片组,您可以找到它here。对于三星Exynos,您可以找到它here。现在,如果您的设备支持双摄像头并且其中安装了最新的操作系统,那么您可以使用(ref)开发的此应用程序Jens来验证双摄像头是否正常工作。它应该可以工作,它确实适用于我的Nexus 6。 视频:http://youtu.be/lt8N1Lpa9Zw
谢谢,Jai
答案 2 :(得分:0)
我也想做同样的事,但无法实现它,它的android os限制。
您必须释放连接的相机对象才能被其他人访问。
访问AudioRecord类时遇到同样的问题,在释放第一个类之前,你无法创建它的对象。