React Native Android 中应用程序进入后台时如何隐藏当前屏幕

问题描述 投票:0回答:3

我有一个react-native-init应用程序,它使用appState来检测应用程序何时进入后台,以隐藏用户正在使用的屏幕(例如电子邮件列表),并在其前面放置一个图像直到用户再次调用应用程序前台并通过身份验证。

这是为了防止任何人在检查当前打开的应用程序时看到用户在我的应用程序中检查的最后一个屏幕是什么样子,并看到图像(如启动屏幕)。

这在 iOS 中可以轻松实现,因为 iOS 分为三个阶段:

  1. active:当应用程序处于前台使用时。
  2. 非活动:当应用程序正在转换时即将进入后台时。
  3. background:当应用程序已经在后台时。

因此,当应用程序进入“非活动”状态时,组件状态中的标志会发生更改,并显示带有图像的组件,而不是当前屏幕。 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中检测应用程序何时进入后台,以便在进入后台之前可以用图像替换当前屏幕?

android react-native android-activity
3个回答
4
投票

正确的方法是在窗口上设置 SECURE 标志,以便 Android 操作系统为您处理此问题以及其他可能的问题,例如屏幕截图。执行此操作的代码是

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

这可以在调用 setContentView 之前放置在 Activity 的 onCreate 中。


1
投票
链接

三个阶段可以帮助你

onPause:当活动对用户不可见时调用。

onStop:当 Activity 对用户不再可见时调用。

onResume:当 Activity 再次开始与用户交互时调用。


0
投票
https://github.com/misaku/react-native-background-secure

,ios你可以使用appstate

© www.soinside.com 2019 - 2024. All rights reserved.