安卓:如何确定相机何时被激活

3
我正在编写一款Android应用程序,用户可以在后台运行该应用程序,以侦测相机何时被打开(无论是由用户还是其他应用程序打开)。这也应该能够检测到其他应用程序(如Facebook、Instagram)没有使用默认的Android相机应用程序的情况下。
我一直在搜索,但没有看到任何在相机激活时发送的广播。到目前为止,我看到有一个Camera.open()函数,如果相机已经被其他应用程序使用会抛出RuntimeException异常。因此,一种方法是不断轮询Camera.open(),但这样做非常昂贵。是否有更好的替代方案?
谢谢!
编辑:抱歉,我没有清楚地说明,但我想做的是创建某种相机使用日志:它何时被打开/关闭,持续时间有多长等等。

2
你为什么认为你有权知道其他应用何时使用相机? - CommonsWare
1
我是新手 Android 开发者,根据我所了解到的,相机是一个共享资源,所以我认为想要知道它何时开启/关闭并不过分。 - user1631605
用户可以知道相机是否正在使用,因为用户正在使用相机。 - CommonsWare
1
哦,抱歉我没有表述清楚,但是我的意思是创建一种相机使用日志:记录它何时开启/关闭,持续时间有多长等等... - user1631605
你不知道你的相机是否正在使用吗?这是你的设备,所以你应该知道任何你想知道的东西,不是吗? - baTimá
1
有没有人想到过摄像头可能被某种恶意软件使用的情况?而且,用户无法知道摄像头是否被恶意软件在不知情的情况下使用。这就是关键! - Panagiotis
1个回答

3
发生的内部情况是Camera API与CameraService通信,CameraService有一个mBusy变量来跟踪相机是否繁忙。但是没有API可以在不调用open()的情况下将这个mBusy标记从服务中提取出来。
我可能是错的,因为我只是粗略地看了一下。
你可以下载Android源代码(http://source.android.com/)自己仔细查看。
对你有兴趣的文件包括:
\frameworks\base\services\camera\libcameraservice\CameraService.cpp \frameworks\base\libs\camera\Camera.cpp \frameworks\base\core\java\android\hardware\Camera.java
\frameworks\base\core\jni\android_hardware_Camera.cpp 另一个想法是尝试查看日志。如果相机服务/API的日志没有关闭,您可以解析日志以检查相机何时打开或关闭。但是,在4.1版本的操作系统中可能无法正常工作,因为Google限制了系统日志的读取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接