我不希望用户截取我的应用程序的屏幕截图或录制屏幕。我在窗口中添加了安全标志。这可以防止用户截取屏幕截图和录制屏幕。
如果屏幕录制打开,我的应用程序会阻止录制内容,但会录制音频。
在某些根设备上,安全标志可能无法按预期工作。所以我只想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止它被记录。
有什么方法可以检测屏幕录制是否开启?
我不希望用户截取我的应用程序的屏幕截图或录制屏幕。我在窗口中添加了安全标志。这可以防止用户截取屏幕截图和录制屏幕。
如果屏幕录制打开,我的应用程序会阻止录制内容,但会录制音频。
在某些根设备上,安全标志可能无法按预期工作。所以我只想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止它被记录。
有什么方法可以检测屏幕录制是否开启?
有什么方法可以检测屏幕录制是否开启?
不。
所以我只想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止它被记录。
由于屏幕录制不需要特定于录制的应用程序或进程(例如,adb shell screenrecord
),并且由于您无法了解正在使用媒体投影 API 的特定应用程序或进程,因此这似乎不切实际。而且,在现代版本的 Android 上,无论如何,您无法知道其他进程正在运行。此外,没有什么可以阻止用户将另一个摄像头指向设备屏幕并以这种方式记录其内容。
我不希望用户截取我的应用程序的屏幕截图或录制屏幕
然后不要编写应用程序。背后的想法FLAG_SECURE
是帮助保护用户免受第三方的侵害,而不是保护开发人员免受用户的侵害。
这里的答案实际上只是一般的安全性。一旦数据流向某人的设备,那么您必须假设他们可以完全、不受限制地访问它。从某种意义上说,其他一切都只是混淆。充其量只是让它变得更加困难。即使设备的软件提供了一些保护,用户也可以物理访问设备并且可以对其进行 root。在某些时候,必须对数据进行未加密和去混淆处理,以便将其显示给用户,并且恶意用户可以 MITM 这样做。如果您想要更好的安全性,则需要由设备通过硬件提供。这是最初将电影流式传输到移动设备的一个大问题。设备'
现在上面的内容只是为了表明,当数据进入用户的设备时,无法保证您可以控制数据。相反,你应该退后一步,问问你想要完成什么?你想阻止什么类型的行为?如果少数精通技术的用户能够解决您的保护问题,这还可以还是很重要?什么是可接受的数据“泄漏”率。这实际上取决于数据的敏感程度以及您告诉用户您拥有的保证类型。这方面100%是最关键的部分。如果您告诉用户他们发送的数据保证是短暂的,那么这是不可能的。试图建立它并修补所有漏洞并玩重击鼹鼠游戏是一场失败的战斗。获胜的唯一方法就是不玩。
正如@CommonsWare 所说,没有办法
了解正在使用媒体投影 API 的特定应用程序或进程,这似乎不切实际。
但是,您可以FLAG_SECURE
这样使用。
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
如此处的文档中所述。