【问题标题】:Use 'react-native-camera' with the app closed在应用关闭的情况下使用“react-native-camera”
【发布时间】:2019-12-26 20:05:33
【问题描述】:

当应用程序进入前台时,是否可以防止“react-native-camera”卸载?

我已经使用“@voximplant/react-native-foreground-service”轻松成功地创建了前台服务,但是当应用失去焦点时,“react-native-camera”似乎正在卸载。

我知道这是正常行为,但我正在寻找一种在前台使用应用程序扫描条形码并对这些事件做出反应的方法。

【问题讨论】:

  • 抱歉,这里可能有误会。当应用程序处于前台时,这意味着该应用程序处于活动状态。背景是指用户在主屏幕或其他应用中时。
  • 我指的是Android前台服务,但是是的,即使应用程序在后台或关闭,我也想保持相机打开。
  • 您正在使用什么 API 级别的 Android?您是否尝试过使用生命周期方法?你看过这个proandroiddev.com/…吗?

标签: android react-native foreground-service react-native-camera


【解决方案1】:

问题是由“react-native-camera”实现引起的。此模块处理应用程序状态更改。如果应用程序进入后台,它会停止相机本身。一旦应用程序被带到前台,它就会恢复摄像头:

@Override
public void onHostResume() {
  if (hasCameraPermissions()) {
    if ((mIsPaused && !isCameraOpened()) || mIsNew) {
      mIsPaused = false;
      mIsNew = false;
      start();
    }
  } else {
    RNCameraViewHelper.emitMountErrorEvent(this, "Camera permissions not granted - component could not be rendered.");
  }
}

@Override
public void onHostPause() {
  if (mIsRecording) {
    mIsRecordingInterrupted = true;
  }
  if (!mIsPaused && isCameraOpened()) {
    mIsPaused = true;
    stop();
  }
}

https://github.com/react-native-community/react-native-camera/blob/c62be1e99af9a8a9b44fc8b62744ca08c05bead9/android/src/main/java/org/reactnative/camera/RNCameraView.java#L477-L498

@voximplant/react-native-foreground-service 模块只启动一个前台服务,但不影响其他模块,也不调用任何android原生相机API。前台服务旨在解决 Android 9 (P) (https://developer.android.com/about/versions/pie/android-9.0-changes-all#bg-sensor-access) 中引入的隐私限制。

【讨论】:

  • 感谢您的澄清!我进行了更深入的研究,我发现即使在原生 Android 中,Java 也很难在没有“黑客”的情况下在后台保持相机打开(在旧版本的 Android 上)。不知道新的隐私限制,感谢您告诉我。
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 2020-02-11
  • 2018-01-23
  • 2022-10-15
  • 1970-01-01
  • 2012-05-29
  • 2016-11-03
  • 2023-03-12
相关资源
最近更新 更多