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

标签 android react-native android-activity

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

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

这在 iOS 中很容易实现,因为 iOS 分为三个阶段:

  1. active:当应用程序在前台使用时。
  2. inactive:当应用程序正在转换为后台时。
  3. background:当应用已经在后台时。

因此,当应用程序进入非 Activity 状态时,组件状态中的标志会更改,并显示带有图像的组件而不是当前屏幕。

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,但似乎因为应用程序已经是 background 组件不会对状态更改使用react,并且何时您检查已打开的应用程序列表,您仍然会看到上次使用的屏幕,该屏幕可能包含敏感数据。

有什么方法可以在应用程序进入后台时在 react native Android 中检测到,以便在进入后台之前可以用图像替换当前屏幕?

最佳答案

Android 内置了防止敏感数据泄露的机制。使用它们,不要试图用图像覆盖 - 或者至少不要单独依赖它。

正确的做法是在窗口上设置 SECURE 标志,这样 Android 操作系统就会为您处理这个问题和其他可能的问题,例如屏幕截图。这样做的代码是

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

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

关于android - 当应用程序在 React Native Android 中进入后台时如何隐藏当前屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558904/

相关文章:

java - 如何知道在其他 Activity 中单击了哪个按钮

java - Android 在一个 Activity 上只运行一次类

仅适用于平板电脑的 Android 应用程序?

react-native - React Navigation v5 不会重置和删除以前的路线

android - 在 QRcodeScanner React Native 中打开/关闭手电筒 - 替代解决方案

ios - 打印 : Entry, ":CFBundleIdentifier",在 React Native IOS 版本中不存在

java - 是否可以在 Android 中使用 YouTube API 来显示 360° 视频?

每个项目有 2 个 TextView 的 Android ListView

安卓缓存管理器

java - 拍摄屏幕照片时显示对话框