检测当另一个应用程序尝试使用相机。

19 浏览
0 Comments

检测当另一个应用程序尝试使用相机。

我们的应用作为后台服务运行,不断从前置摄像头获取图像并对图像进行处理。然而,当用户尝试打开另一个使用摄像头的应用时,会出现两种情况:要么新应用崩溃而我们的应用继续运行,要么我们的应用崩溃而新应用获得对摄像头的访问权限。

现在,如果我们的应用失去对摄像头的控制,会抛出一个异常,我们可以捕获这个异常,并尝试重新访问摄像头,直到重新获得访问权限,使一切恢复正常。

问题是其他应用因为我们的应用而崩溃时,我们如何检测到这一情况,以便我们可以暂停我们的应用,直到我们能够再次访问摄像头?

0
0 Comments

很不幸,相机API或Android SDK一般不提供这种信息。好消息是,逐渐有越来越多的新设备可以独立打开前置和后置摄像头。这可以减少冲突的概率。

根据你的描述,应用程序之间因为访问摄像头而发生冲突可能是合理的,但是开玩笑的是,你无能为力。是他们的问题,他们没有正确检查RuntimeException。

最近,Android加强了应用程序之间的隔离,因此可能无法跟踪启动的应用程序(请参见App to monitor other apps on android),除非你的应用程序具有系统权限。

解决方法:

由于Android系统的限制,无法直接检测到其他应用程序尝试使用摄像头的情况。然而,有几种方法可以间接解决这个问题。

1. 使用异常处理:在你的应用程序中,可以使用try-catch语句来捕获RuntimeException。当其他应用程序尝试访问摄像头时,它们可能会引发RuntimeException。通过捕获并处理该异常,你可以在发生冲突时采取适当的措施。

2. 检查摄像头是否可用:在你的应用程序中,可以使用CameraManager类来检查摄像头是否可用。通过调用CameraManager的getCameraIdList()方法,你可以获取设备上可用的摄像头列表。如果其他应用程序正在使用摄像头,它将在列表中显示。你可以根据需要采取相应的行动。

3. 提示用户:如果你的应用程序与其他应用程序发生冲突,你可以向用户显示一个提示消息,告诉他们为什么无法使用摄像头,并提供解决方案或建议他们关闭冲突的应用程序。

需要注意的是,这些方法都是间接的解决方案,并不能完全防止其他应用程序使用摄像头。因此,你的应用程序应该具备容错能力,能够处理其他应用程序可能引发的异常情况。

0
0 Comments

当另一个应用程序尝试使用相机时,会出现这个问题,这是因为相机是一个独占资源。我们的应用程序需要持续访问相机,但是当其他应用程序尝试使用相机时,我们希望释放相机资源,因为目前其他应用程序只会崩溃而不会向用户通知原因(尽管有些手机会通知并将我们的应用程序从后台切换到前台)。不断释放、分析,然后再次打开相机将会太慢(对相机打开进行了快速测试,耗时约为350毫秒。应用程序需要以最低15帧/秒运行,但20帧以上效果更好)。

为什么在应用程序不打开时需要访问相机?您可以在onpause方法中释放相机,然后在onresume方法中重新初始化相机。

如果由于任何原因打开相机失败,应用程序会抛出RuntimeException异常。这里有一段代码可能会有用。

我们的应用程序监控驾驶员,分析面部动作,并在驾驶员分心或打瞌睡时触发警报。驾驶员可能想检查时间或接听电话,但我们的应用程序必须继续运行,否则我们会强制他在完成任何导致应用程序暂停的操作后重新启动我们的应用程序。因此,它在后台运行,始终分析并始终使用相机。然而,如果驾驶员决定使用相机(虽然在驾驶时他真的不应该这样做,但这不在我们的控制范围内),那么我们必须暂停我们的应用程序。

问题是如何检测另一个应用程序尝试打开当前被我们应用程序使用的相机。

0