在 React-native 中检测 NativeModule 何时为 运行

Detect when a NativeModule is running in React-native

所以我在应用程序中使用了几个不同的 NativeModules(Android 和 iOS 特定的)来播放视频等。这意味着屏幕由本机代码接管,例如。 Java 或 Swift 及其各自的 ViewController 控制视图而不是 React-Native。

这一切都很好并且可以正常工作,但我确实需要检测 NativeModule 是否为 运行,例如。它的观点或 RN 的观点正在显示。 如果我使用 { useIsFocused } from '@react-navigation' 它无法检测到 NativeModule 何时接管视图,它总是说我激活 NativeModule 的视图是 inFocus。

{ AppState } from 'react-native' 相同,它始终显示为 active,即使本机视图被覆盖也是如此。

有人找到解决这个问题的方法吗?

  1. 确保以正确的方式处理应用状态。
  2. 您可以使用 RCTEventEmitter 发送事件并手动管理它们
  3. 使用回调或承诺并更改应用中的状态

如果您使用自己的自定义组件作为 NativeModule,那么您可以

  1. 在您的代码中声明一个布尔值 属性 isVisible,并在您的组件初始化或销毁时分别将其设置为 truefalse。对于 iOS 中的 UIViewController,您可以为此目的使用 viewWillAppearviewWillDisappear
  2. isVisible 属性 创建一个 getter 并将其导出到 Javascript。 你可以从这个 link 中得到帮助: https://reactnative.dev/docs/native-modules-ios#export-a-native-method-to-javascript
  3. 从您的 React 本机代码内部调用 getter 以检查 NativeModule 是否在屏幕上可见。