当我的应用程序转到后台时,如何防止Android获取屏幕截图?
我目前正在构build的应用程序要求应用程序必须防止操作系统为了安全起见将应用程序推入后台时截屏。 这样,在应用程序之间切换时,将无法看到最后一个活动屏幕。
我打算把这个function放在应用程序类的onPause方法中,但首先我需要找出如何实现这个function。
那么有没有人在那里,有一个线索如何解决这个问题?
尝试FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); setContentView(R.layout.main); } }
这从ICS最近任务历史logging中的手动截图和自动屏幕截图中确实得到保证。
更新 :它也保护现在在水龙头或其他助手在Android 6.0; 如果用户提供助手,他们将无法访问用户界面中的小部件和容器的详细信息。
更新#2 :但是,并不是在活动中的一切都会受到保护。 任何popup窗口 – Dialog
, Spinner
, AutoCompleteTextView
,操作栏溢出等 – 将是不安全的。 您可以通过调用getWindow()
并设置FLAG_SECURE
来修复Dialog
问题。 其余…变得棘手。 看到这个博客文章更多。
在使用WindowManager.LayoutParams.FLAG_SECURE时,要注意在一些设备上(在Samsung Galaxy ACE上validation,例如GT-S5830),这样会使视图变混乱。 看起来像一个三星特定的错误。 我build议如下:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); }
这是一个乱七八糟的屏幕:
这在ICS三星手机上正常工作,所以我假设问题是隔离姜饼设备(或更旧)。
CommonsWare提供的解决scheme在棒棒糖中仍然有效。
只需要注意,如果你想继续在整个应用程序的最近列表中看不到快照,所有实现的活动都应该在onCreate()
方法中指定标志getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
在setContentView();
之前setContentView();
否则,如果用户在其中浏览,最近列表中的快照将显示没有标志的第一个活动。