java 如何以编程方式检测Android中是否有任何屏幕录制进程/应用程序正在运行?

3j86kqsm  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(398)

我不希望用户截图或记录我的应用程序的屏幕。我已经添加了安全标志的窗口。这可以防止用户截图和记录屏幕。
如果屏幕录制处于打开状态,我的应用会阻止录制内容,但会录制音频。
在一些根设备上,安全标志可能不会像预期的那样工作。所以我只想检测是否有屏幕录制应用/进程在后台运行,这样我就可以隐藏敏感数据并防止其被录制。
有什么方法可以检测屏幕录制是否打开?

eoxn13cs

eoxn13cs1#

有什么方法可以检测屏幕录制是否打开?
没有。
所以我只想检测是否有任何屏幕录制应用程序/进程在后台运行,这样我就可以隐藏敏感数据,防止其被录制。
由于屏幕录制不需要特定于录制的应用程序或进程(例如adb shell screenrecord),而且由于你无法知道正在使用媒体投影API的特定应用或进程,这似乎不切实际。而且,在现代版本的Android上,你也无法知道其他进程正在运行。另外,没有什么可以阻止用户将另一个摄像机指向设备屏幕并以这种方式记录其内容。
我不希望用户对我的应用进行屏幕截图或录制屏幕
那么就不要编写应用程序。FLAG_SECURE背后的想法是帮助保护用户免受第三方的攻击,而不是保护开发人员免受用户的攻击。

xfyts7mz

xfyts7mz2#

这里的答案实际上只是一般性的安全问题。一旦数据流入某人的设备,那么你必须假设他们可以完全、不受限制地访问它。从某种意义上说,其他一切都只是混淆。充其量只是让它变得更困难一些。即使设备的软件提供了一些保护,用户具有对设备的物理访问权并且可以将其设为根。在某些点上必须对数据进行解密和解模糊,这样它就可以显示给用户,恶意用户可以mittm这一点。如果你想要更好的安全性,那么它需要由设备通过硬件提供。这是一个很大的问题,电影流到移动的设备在第一次。设备的需要一个特殊的硬件加密通道,解密到一些可怕的数据量每秒,使其难以写回磁盘,如果有人试图MITM的未加密数据的方式到屏幕上。
以上只是为了说明,当数据进入用户设备时,你不可能保证你能控制数据。相反,你应该退一步,问问你想达到什么目的?你想阻止什么类型的行为?如果少数精通技术的用户能够绕过你的保护措施,这是好的还是一个大问题?什么是可接受的数据“泄漏”率。这真的取决于数据有多敏感,以及你告诉用户你对它有什么样的保证。这方面是100%最关键的部分。如果你告诉用户,他们发送的数据肯定是短暂的,那么这是不可能的。试图建立这样的数据,修补所有漏洞,玩打地鼠游戏是一场必败之战。唯一的胜利之道就是不玩。

mf98qq94

mf98qq943#

就像@CommonsWare说的那样
了解正在使用媒体投影API的特定应用程序或进程,这似乎不切实际。
但是,您可以像这样使用FLAG_SECURE

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

如这里的文档所述。

相关问题