我们的应用程序作为后台服务运行,不断从正面相机获取图像,然后处理图像。但是,当用户尝试打开另一个使用相机的应用程序时,会发生两件事:新应用程序崩溃,我们的应用程序崩溃,或者我们的崩溃和新的崩溃都可以访问摄像头。
现在,如果我们的应用程序失去了对摄像头的控制权,那么我们可以捕获一个例外,然后我们可以开始尝试访问它,直到我们获得访问权限并且事情恢复正常。
问题是当其他应用程序因我们的而崩溃时。有没有办法检测到这一点,所以我们可以暂停我们的应用程序,直到我们可以再次访问相机?
这是因为相机是独家资源。
我建议你阅读Camera documentation,其中说:
如果您的应用程序未正确释放相机,则所有后续访问相机的尝试(包括您自己的应用程序)都将失败,并可能导致您或其他应用程序关闭。
不幸的是,Camera API或Android SDK通常不提供此类信息。好消息是,越来越多的新设备让您可以独立打开前置摄像头和后置摄像头。这可以减少冲突的可能性。
根据您的描述,将与您的应用程序竞争的应用程序与访问摄像机相比可能是合法的,但是,除了笑话之外,您无能为力。他们没有正确检查RuntimeException是他们的错。
Android最近收紧了应用程序之间的隔离,因此可能无法跟踪哪些应用程序已启动(请参阅App to monitor other apps on android),除非您的应用程序具有系统权限。