我想知道是否有一种方法可以通过一些“onXXXXX”回调方法或接收的广播来检测其他进程是否即将对我的应用程序显示屏截图。例如,如果SDK工具或其他屏幕捕获应用程序执行了“屏幕截图”,我想得到通知,然后决定是否允许或拒绝屏幕截图。
如果这不可能,是否有一种方法可以锁定显示屏,以便其他进程无法屏幕截图我的显示屏?
我想知道是否有一种方法可以通过一些“onXXXXX”回调方法或接收的广播来检测其他进程是否即将对我的应用程序显示屏截图。例如,如果SDK工具或其他屏幕捕获应用程序执行了“屏幕截图”,我想得到通知,然后决定是否允许或拒绝屏幕截图。
如果这不可能,是否有一种方法可以锁定显示屏,以便其他进程无法屏幕截图我的显示屏?
这对我在三星Tab 2 7"上的设备有效。
使用以下方法,将简单地向窗口标志添加FLAG_SECURE
。
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(LayoutParams.FLAG_SECURE,
LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
有一个警告,可能需要更改
LayoutParams
到
WindowManager.LayoutParams
在Android上,没有受支持的方法可以截取另一个应用程序的屏幕截图。唯一的方法是使用root权限或SDK,这两种方式都几乎不能阻止或接收通知。如果另一个应用程序截取了您的屏幕截图,则默认情况下它正在使用不受支持的方法,可能可以随意使用。
我想澄清的是,我并不是在暗示您不应该使用任何可用的方法来保护您的应用程序。我只是想让您知道,即使使用这些方法,您也可能无法100%安全地防止截屏。
View.getDrawingCache(boolean autoScale)
这个怎么样?文档上说:返回此视图绘制被缓存的位图。 - iDroid
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
在安卓9.0上不起作用。 - Rajeev Sahu