我有一个react-native-init应用程序,它使用appState来检测应用程序何时进入后台,以隐藏用户正在使用的屏幕(例如电子邮件列表),并在其前面放置一个图像直到用户再次调用应用程序前台并通过身份验证。
这是为了防止任何人在检查当前打开的应用程序时看到用户在我的应用程序中检查的最后一个屏幕是什么样子,并看到图像(如启动屏幕)。
这在 iOS 中可以轻松实现,因为 iOS 分为三个阶段:
因此,当应用程序进入“非活动”状态时,组件状态中的标志会发生更改,并显示带有图像的组件,而不是当前屏幕。
handleAppStateChange = (nextAppState) => {
if (nextAppState.match(/inactive|background/)) {
this.setState({ showSplashScreen: true })
}
if (this.state.appState.match(/background/) && nextAppState === 'active') {
this.setState({ showSplashScreen: false })
}
}
然而,android只使用active和background
appStates,所以当它进入后台时,函数被调用,background作为nextAppState,并且状态中的标志showSplashScreen更改为true,但似乎从那时起该应用程序已经是背景该组件不会对状态更改做出反应,当您检查打开的应用程序列表时,您仍然会看到最后使用的屏幕,该屏幕可能包含敏感数据。
有什么方法可以在react-native Android中检测应用程序何时进入后台,以便在进入后台之前可以用图像替换当前屏幕?
正确的方法是在窗口上设置 SECURE 标志,以便 Android 操作系统为您处理此问题以及其他可能的问题,例如屏幕截图。执行此操作的代码是
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
这可以在调用 setContentView 之前放置在 Activity 的 onCreate 中。