Android 12:检测用户是否disables/enables摄像头和麦克风

Android 12: Detect if user disables/enables camera and microphone

使用新的 Android 12 操作系统,用户现在可以完全禁用所有应用程序的麦克风和摄像头使用。这其实是一件好事,让用户轻松控制隐私。

如果某个应用程序启动并有权使用麦克风和摄像头,并且用户已禁用对这些硬件中任何一个的所有访问权限,Android12 会自动弹出警报,要求用户重新启用麦克风或摄像头,或继续为应用禁用硬件。

此外,在创建时,应用程序可以在启动时简单地检查是否启用了所需的硬件,还可以进一步提示用户或处理应用程序认为合适的情况。

但是,如果用户在 应用 运行 时禁用麦克风或摄像头怎么办?我似乎找不到 onMicrophoneEnabled() 之类的任何接口,甚至找不到此类事件的广播。

每次调用 onResume() 时都可以检查,但我希望有更优雅的解决方案。

如果有人知道当用户以任何方式进行更改时我的应用程序可以用来捕获此内容,请告诉我。

仔细 阅读了 google 文档 (https://developer.android.com/training/permissions/explaining-access#toggles) 之后,我发现了关于用户 enable/disable 相机和麦克风的实现非常有趣的事情:

应用程序被明确禁止知道用户是否进行了这些操作。所以当然没有办法得到这些变化的通知:这是设计使然。

如果用户以这种方式关闭摄像头,应用仍会收到摄像头画面,但会是黑色。同样,麦克风仍会工作,但我们只会保持沉默。这是一项功能——一种确保隐私的方式。

操作系统会提醒用户他们已禁用麦克风或摄像头,并提供机会 re-enable 硬件,这很好。但是app完全是蒙在鼓里的(呵呵)

另一种思考方式:就像将一段胶带放在相机上或将拇指放在麦克风上一样。只是这一次是由操作系统完成的。这样间谍程序或其他一些恶意软件仍会认为它在工作,不会试图绕过或放弃。

这也解释了为什么在 onResume()onWindowFocusChanged() 期间进行的测试也不起作用。我得到的结果与设置不一致(它们与当前权限一致)。

所以回答我的问题:无法收到通知。这就是重点。