尽管应用程序在 Android 上移至后台,但 GPS 仍保持打开状态

Posted

技术标签:

【中文标题】尽管应用程序在 Android 上移至后台,但 GPS 仍保持打开状态【英文标题】:GPS stays on although app is moved to background on Android 【发布时间】:2016-03-21 08:37:02 【问题描述】:

虽然我的 React Native 应用程序已移至后台,但我的 GPS 仍处于开启状态并不断轮询存在问题。这在 ios 上运行正常,但在 android 上没有任何反应。

代码如下:

componentDidMount() 
  const  dispatch  = this.props

  navigator.geolocation.getCurrentPosition((initialPosition) => 
    dispatch(setUserLocation(initialPosition.coords))

    this.setState(
      locationError: false,
      position: initialPosition
    )
  , (error) => 
    this.setState(
      locationError: true
    )
  , 
    enableHighAccuracy: true,
    timeout: 20000,
    maximumAge: 1000
  )

  this.startWatchingPosition()


startWatchingPosition() 
  this.watchID = navigator.geolocation.watchPosition((lastPosition) => 
    if (this.state.position) 
      let distance = geolib.getDistance(this.state.position.coords, lastPosition.coords)
      if (distance > 250) 
        this.setState(
          locationError: false,
          position: lastPosition
        )
        dispatch(setUserLocation(lastPosition.coords))
      
    
    else 
      this.setState(
        locationError: false,
        position: lastPosition
      )
    
  )


stopWatchingPosition() 
  navigator.geolocation.clearWatch(this.watchID)
  navigator.geolocation.stopObserving()

stopWatchingPosition()AppState 等于背景 时执行。这被证明是可行的,它实际上在 iOS 和 Android 上都被调用了。但由于某种原因,Android 失败了。

我在 SO 上找不到任何类似的问题,在 RN 上也没有未解决的问题。

【问题讨论】:

我还没有研究过 react native,但是在 android SDK 中你可以禁用检查位置更新 onPause 方法。 【参考方案1】:

这已经解决了。根本原因在react-native-mapbox-gl,4 天前有一个关于它的报告问题:https://github.com/mapbox/react-native-mapbox-gl/issues/310

【讨论】:

以上是关于尽管应用程序在 Android 上移至后台,但 GPS 仍保持打开状态的主要内容,如果未能解决你的问题,请参考以下文章

尽管 content_available = true,但没有在后台调用 didReceiveRemoteNotification

尽管应用程序实例终止,但 Android 会定期获取位置

尽管错误共享,但速度提高

尽管它显示在任务栏上,但 Android Studio 模拟器无法正常工作

尽管它很简单,但Android应用程序不会停止崩溃[重复]

移动端登录页面input获取焦点后页面布局及输入框上移的问题