我正在开发一个应用程序,一旦用户进入预定义区域,即使GPS关闭或不可用,该应用程序也会执行一些操作。
问题:如何识别用户已进入该区域(半径或精度为500至700米)。
可能的解决方案与专业人士;缺点:
- 地理围栏:只有在GPS打开的情况下,它才会工作,否则将不会&即使GPS打开,但没有与卫星的连接,根据我的应用程序的使用情况(在地下室、地下或隧道中),地理围栏也不会触发。所以不能完全依赖GPS
优点 :
a。如果GPS打开,将工作&能够与卫星连接。
b。即使移动屏幕关闭(即睡眠模式)也能工作
缺点 :a.如果GPS关闭,将不起作用。
b。在地下室、隧道等连接问题的情况下将不起作用。
- addProximityAlert:有人能解释一下addProximiityAlert&地理围栏?哪一个更好?在以下情况下是否触发接近警报:
a。当屏幕关闭但GPS打开时。
b。GPS关闭时。
- 来自onCellLocationChanged()的Cell id:As不能完全依赖GPS(可能关闭或没有连接),因此考虑使用cellLocation。因此,我实现了MyPhoneStateListener扩展了PhoneStateLister,并将其注册到PhoneStateListener.LISTEN_CELL_LOCATION&override onCellLocationChanged方法
我知道我希望在条目上执行操作的区域的单元id或塔id,所以当调用onCellLocationChanged方法时,我从cellLocationobject&将其与存储的细胞ID进行比较。
问题是onCellLocationChanged方法在屏幕时不调用如果关闭。发现在传入&传出呼叫,不知道为什么只有当小区位置更改时才能调用它。有人知道原因吗?
优点 :
a。即使GPS关闭也能工作。
缺点 :
a。如果屏幕处于关闭状态(即睡眠模式),则不会调用onCellLocationChanged方法。在传入&呼出电话。
尝试保持部分唤醒锁定此方法未调用。有人写了启动服务&从网络请求位置更新,则即使屏幕关闭,也会调用CellLocationChanged方法。已尝试,但屏幕关闭时仍处于CellLocationChanged状态。
-
创建了每2分钟从网络请求位置更新的服务&最小距离为500米。
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000 *60 *2,500,this);
关于第4点的查询:
a。如果屏幕关闭,我们会从网络上获得位置更新吗?
b。当GPS打开时,从网络获取位置更新,但当GPS关闭时,不从网络获得位置更新。不是百分之百肯定这一点需要更多的检查。请让我知道当我们从网络&GPS关闭。
在一篇帖子中被问到了太多问题,但在探索了10-12天的各种选择后,即使没有GPS,也无法找到可靠的解决方案。
谢谢。
Disclosure:我为Pathsense工作。
虽然我还没有在没有GPS的情况下测试过谷歌的地理围栏或安卓的地理围栏(addProximityAlert()
),但我已经广泛测试了Pathsense地理围栏,我知道它在没有GPS时也能工作(尽管不那么准确)。
但是,如果不可能拥有第三方库,则可以设置minTime至少为30秒的位置更新请求(LocationManager.requestUpdates()
)。这将降低功耗,您只需计算您正在监控的位置与LocationManager提供的位置之间的距离,如果距离大于您的监控区域,则可以执行您想要的任何操作。