【发布时间】:2016-04-03 14:00:57
【问题描述】:
我正在开发一个应用程序,一旦用户进入预定义区域,即使 GPS 关闭或不可用,它也会执行一些操作。
问题:如何识别用户已进入该区域(半径或精度为 500 到 700 米)。
利弊的可能解决方案:
- 地理围栏:只有在 GPS 开启时才会起作用,否则即使 GPS 开启但没有与卫星连接,这很可能根据我的应用程序的用例(在地下室,在地下或隧道中行驶),地理围栏将不会触发。所以不能完全依赖 GPS。
优点:
一个。如果 GPS 已打开且能够与卫星连接,则可以工作。
b.即使手机屏幕关闭(即睡眠模式)也能正常工作
缺点: 一种。如果 GPS 关闭,将无法工作。
b.在地下室、隧道等连接问题的情况下将无法使用。
- addProximityAlert:谁能解释一下 addProximityAlert 和地理围栏有什么区别?哪一个更好?在以下情况下是否触发接近警报:
一个。当屏幕关闭但 GPS 开启时。
b. GPS 关闭时。
- 来自 onCellLocationChanged() 的小区 ID:因为不能完全依赖 GPS(可以关闭或没有连接)考虑使用 cellLocation。所以我实现了 MyPhoneStateListener 扩展了PhoneStateListener,将它注册到PhoneStateListener.LISTEN_CELL_LOCATION 的电话服务并覆盖onCellLocationChanged 方法。
我知道我希望在进入时执行操作的区域的小区 ID 或塔 ID,因此当调用 onCellLocationChanged 方法时,我从 cellLocationobject 获取 cid 并将其与存储的小区 ID 进行比较。
问题是onCellLocationChanged方法不调用时屏幕如果关闭。发现这个方法也被在来电和去电的情况下调用,不知道为什么只有在小区位置改变时才调用它。谁知道原因?
优点:
一个。即使 GPS 关闭也可以工作。
缺点:
一个。如果屏幕关闭(即睡眠模式),则不会调用 onCellLocationChanged 方法。在来电和去电的情况下也会调用它。
尝试保持部分唤醒锁定仍然此方法未调用。有人编写了启动服务并请求从网络更新位置,即使屏幕关闭,也会调用 onCellLocationChanged 方法。尝试过但屏幕关闭时仍然不会调用 onCellLocationChanged。
-
创建的服务每 2 分钟后从网络请求位置更新,最小距离为 500 米。
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000 *60 *2,500,this);
第四点查询:
一个。如果屏幕关闭,我们是否会从网络获取位置更新。
b.当 GPS 正在从网络获取位置更新但当 GPS 关闭时不会从网络获取位置更新。不是 100% 确定这一点需要进一步检查。请让我知道当我们从网络请求位置更新并且 GPS 关闭时的行为。
在一篇文章中问了太多问题,但在探索了 10-12 天的各种选项后,即使没有 GPS,也无法找到可靠的解决方案。
谢谢。
【问题讨论】:
标签: android gps geolocation android-geofence