React Native:如何检测应用程序是不是在启动时/从 AppSwitcher 关闭应用程序后进入前台?

Posted

技术标签:

【中文标题】React Native:如何检测应用程序是不是在启动时/从 AppSwitcher 关闭应用程序后进入前台?【英文标题】:React Native: How to detect if an app has come to the foreground on start/after closing the app from AppSwitcher?React Native:如何检测应用程序是否在启动时/从 AppSwitcher 关闭应用程序后进入前台? 【发布时间】:2021-12-31 03:37:21 【问题描述】:

我希望能够在我的 React Native 应用程序进入前台时订阅事件监听器。

React Native 有 AppState 这些 API,官方文档中有以下示例

const AppStateExample = () => 
  const appState = useRef(AppState.currentState);
  const [appStateVisible, setAppStateVisible] = useState(appState.current);

  useEffect(() => 
    const subscription = AppState.addEventListener("change", nextAppState => 
      if (
        appState.current.match(/inactive|background/) &&
        nextAppState === "active"
      ) 
        console.log("App has come to the foreground!");
      

      appState.current = nextAppState;
      setAppStateVisible(appState.current);
    );

    return () => 
      subscription.remove();
    ;
  , []);

  return (
      <Text>Current state is: appStateVisible</Text>
  );
;

我的问题是当应用程序第一次启动时,或者在我通过向上滑动从 AppSwitcher 关闭 ios 上的应用程序之后,这不起作用。

从 AppSwitcher 关闭应用后第一次启动时,如何检测状态变化?据我所知,在这种情况下,状态是background

【问题讨论】:

【参考方案1】:

尝试将 if 语句更改为如下内容:

  if (
    appState.current.match(/inactive|background/) &&
    nextAppState === 'active'
  ) 
    console.log('App has come to the foreground!');
   else 
    console.log('App state', nextAppState);
  

如果您启动应用程序然后向上滑动将其关闭,您应该会看到以下日志输出:

 LOG  Running "appstatetest" with "rootTag":1,"initialProps":
 LOG  App state active
 LOG  App state inactive
 LOG  App state background

应用程序首次启动时正在输出应用程序状态。当您开始向上滑动时,正在输出应用状态非活动状态,并在应用关闭时输出应用状态背景。

【讨论】:

以上是关于React Native:如何检测应用程序是不是在启动时/从 AppSwitcher 关闭应用程序后进入前台?的主要内容,如果未能解决你的问题,请参考以下文章

你如何检测是不是在 react-native 中点击了屏幕的右半部分?

React Native:检测是不是支持 UIVisualEffectView

如何检测 React Native 应用程序何时关闭(未暂停)?

如何在 React-Native 中创建检测自动位置的地图

在 react-native 文本输入中检测粘贴事件

react-native-navigation如何在`shouldComponentUpdate`中检测当前屏幕