我不希望用户对我的应用程序进行截图或录屏。我已经在窗口中添加了安全标志。这可以防止用户进行截屏和录制屏幕。
如果屏幕录制开启,我的应用程序会防止内容被录制,但是音频会被录制。
在一些已root的设备上,安全标志可能无法按预期工作。因此,我只想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止其被录制。
是否有办法检测屏幕录制是否开启?
我不希望用户对我的应用程序进行截图或录屏。我已经在窗口中添加了安全标志。这可以防止用户进行截屏和录制屏幕。
如果屏幕录制开启,我的应用程序会防止内容被录制,但是音频会被录制。
在一些已root的设备上,安全标志可能无法按预期工作。因此,我只想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止其被录制。
是否有办法检测屏幕录制是否开启?
有没有办法检测屏幕录制是否开启?
不行。
所以我想检测是否有任何屏幕录制应用程序/进程在后台运行,以便我可以隐藏敏感数据并防止其被记录下来。
由于屏幕录制不需要特定的应用程序或进程(例如adb shell screenrecord
),而且您无法知道使用媒体投影API的特定应用程序或进程,因此这似乎是不切实际的。在现代Android版本中,您也无法知道正在运行哪些其他进程。此外,用户可以用另一台相机对准设备屏幕并以此记录内容。
我不希望用户截取我的应用程序的屏幕或录制屏幕
那就不要编写该应用程序。FLAG_SECURE的想法是帮助用户抵御第三方,而不是保护开发人员免受用户的攻击。
FLAG_SECURE
并不是作为数字版权管理(DRM)解决方案而设计的。 - CommonsWare正如@CommonsWare所说,没有办法知道使用媒体投影API的特定应用程序或进程,这似乎不切实际。
然而,您可以像这样使用
FLAG_SECURE
。
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
我认为有一种方法可以通过DisplayManager.DisplayListener来检测屏幕录制的开启或关闭。
以下是我的代码:
val listener = object : DisplayManager.DisplayListener {
override fun onDisplayChanged(displayId: Int) {
Log.d("test","1")
//it detect something chnage in screen
//you can mute it from here
}
override fun onDisplayAdded(displayId: Int) {
Log.d("test","2")
//you can mute it to here from
}
override fun onDisplayRemoved(displayId: Int) {
Log.d("test","3")
//final here you can unMute it
}