无法使用WindowManager在Android 12上保护窗口,LayoutParams.FLAG_SECURE

nxowjjhe  于 2022-12-16  发布在  Android
关注(0)|答案(2)|浏览(166)

在Android 12上,如果我使用WindowManager.LayoutParams.FLAG_SECURE创建一个简单的应用

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(
            WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE
        )
        setContentView(R.layout.activity_main)
    }
}

如果我尝试切换应用程序,窗口不安全

但是,如果我切换回来,窗口确实安全

在这两种情况下,切换到或从,窗口安全的Android 11,但不安全的Android 12。

n53p2ov0

n53p2ov01#

截至Android版本12,这是所需的行为。此外,您可以检查Google问题跟踪器。
https://issuetracker.google.com/issues/237190495
我们可以使用onWindowFocusChanged(boolean)代替onPause和onResume。当Activity没有焦点时,我们可以启用FLAG_SECURE当应用重新获得焦点时,我们可以清除FLAG_SECURE

2hh7jdfx

2hh7jdfx2#

在Activity上使用View#onWindowFocusChanged(boolean)的简单方法:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
  super.onWindowFocusChanged(hasFocus);
  if (hasFocus) {
    // allow screenshots when activity is focused
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
  } else {
    // hide information (blank view) on app switcher
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
  }
}

相关问题