Android 安卓位置更新&;细胞定位

Android 安卓位置更新&;细胞定位,android,gps,geolocation,android-geofence,Android,Gps,Geolocation,Android Geofence,我正在开发一个应用程序,一旦用户进入预定义区域,即使GPS关闭或不可用,也会执行一些操作 问题:如何识别用户已进入该区域(半径或精度为500到700米) 可能的解决方案及其利弊: Geofence:仅当GPS开启时,Geofence才会工作,否则不会工作&即使GPS开启,但没有与卫星的连接,根据我的应用程序的使用情况(在地下室、地下或隧道中),Geofence也不会触发。所以不能完全依靠GPS 专业人士: a。如果GPS打开并能够与卫星连接,则将正常工作 b。即使手机屏幕关闭(即睡眠模式),也能

我正在开发一个应用程序,一旦用户进入预定义区域,即使GPS关闭或不可用,也会执行一些操作

问题:如何识别用户已进入该区域(半径或精度为500到700米)

可能的解决方案及其利弊:

  • Geofence:仅当GPS开启时,Geofence才会工作,否则不会工作&即使GPS开启,但没有与卫星的连接,根据我的应用程序的使用情况(在地下室、地下或隧道中),Geofence也不会触发。所以不能完全依靠GPS
  • 专业人士

    a。如果GPS打开并能够与卫星连接,则将正常工作

    b。即使手机屏幕关闭(即睡眠模式),也能正常工作

    缺点: A.如果GPS关闭,将无法工作

    b。在地下室、隧道等连接问题的情况下不起作用

  • addProximityAlert:有人能解释一下addProximityAlert和地理围栏的区别吗?哪一个更好?在以下情况下是否触发接近警报:
  • a。当屏幕关闭但GPS打开时

    b。当GPS关闭时

  • 来自onCellLocationChanged()的小区id:由于无法完全依赖GPS(可能关闭或没有连接),因此考虑使用小区定位。因此,我实现了MyPhoneStateListener扩展了PhoneStateListener,并向PhoneStateListener的电话服务注册了它。LISTEN\u CELL\u LOCATION&override onCellLocationChanged方法 我知道我希望对入口执行操作的区域的单元id或塔台id,因此当调用onCellLocationChanged方法时,我从cellLocationobject获取cid并将其与存储的单元id进行比较

    问题一旦cellLocationChanged方法是屏幕如果关闭时不调用。发现此方法在传入和传出呼叫的情况下也被调用,不知道为什么只有在小区位置发生变化时才调用它。有人知道原因吗

    专业人士

    a。即使GPS关闭也能工作

    缺点

    a。当屏幕处于关闭状态时(即睡眠模式),不会调用onCellLocationChanged方法。它也被称为在传入和传出呼叫的情况下

    已尝试保持部分唤醒锁定状态此方法未调用。有人编写了启动服务&从网络请求位置更新,即使屏幕关闭,也会调用onCellLocationChanged方法。当屏幕关闭时,尝试但仍然onCellLocationChanged未被调用

  • 创建了一项服务,每2分钟从网络请求位置更新,最小距离为500米

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000 *60 *2,500,this);
    
  • 关于第四点的疑问:

    a。如果屏幕关闭,我们是否从网络获取位置更新

    b。当GPS打开时,从网络获取位置更新,但当GPS关闭时,不从网络获取位置更新。这一点不是百分之百确定,需要进一步研究。请让我知道当我们从网络请求位置更新时的行为&GPS关闭

    在一篇帖子中问了太多问题,但在探索了10-12天的各种选择后,即使没有GPS,也无法找到可靠的解决方案


    谢谢。

    披露:我为Pathsense工作

    虽然我没有在没有GPS的情况下测试过Google的geofence或Android的geofence(
    addProximityAlert()
    ),但我已经对geofence进行了广泛的测试,我知道它在没有GPS的情况下也能正常工作(虽然没有那么准确)


    但是,如果不可能拥有第三方库,则可以设置至少30秒的最小时间的位置更新请求(
    LocationManager.requestUpdates()
    )。这将降低功耗,您只需在您正在监视的位置和LocationManager给定的位置之间做一个比较,如果大于您的监视区域,则执行您想要的任何操作。

    谢谢您的回复@Pablo。PathSense是否免费或付费?Pathsense的准确半径是多少。如果没有GPS,它的精度在700到800米之间,对我来说是可行的。是的,它是免费的,而且我认为在这样大小的地理围栏上工作没有问题。我们支持小到50米的地理围栏,尽管我建议在这种情况下使用GPS。感谢您的努力@Pablo。在将答案标记为有帮助之前,将尝试PathSense。事实上,即使在没有GPS的情况下,am制作应用程序也可以工作,距离为700-800米。希望解决办法奏效。干杯