在应用关闭的情况下使用“react-native-camera”

Posted

技术标签:

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

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

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

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

【问题讨论】:

抱歉,这里可能有误会。当应用程序处于前台时,这意味着该应用程序处于活动状态。背景是指用户在主屏幕或其他应用中时。 我指的是android前台服务,但是是的,即使应用程序在后台或关闭,我也想保持相机打开。 您正在使用什么 API 级别的 Android?您是否尝试过使用生命周期方法?你看过这个proandroiddev.com/…吗? 【参考方案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 上)。不知道新的隐私限制,感谢您告诉我。

以上是关于在应用关闭的情况下使用“react-native-camera”的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响实时功能的情况下为 React 和 React-native 托管通用的 Firebase 后端代码?

我的 react-native 应用程序未启动(启动 2 秒并关闭)

有没有办法在不弹出的情况下删除 react-native 中的默认权限?

react-native 中的设备 GPS 配置

切换到下一个文本输入字段而不在 react-native 中关闭键盘

React-Native 和 Detox:无法关闭位置弹出窗口