今天,当我尝试使用我的代码时,脑子里出现了一些关于gps提供程序,gps硬件,gps图标和精确位置许可的疑点。
我在三星galaxy s3上看到了我的代码和gps图标,Htc是一个m8。并且gps 已禁用
mLocationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000 * 10, 0, this, Looper.myLooper());
...
@Override
public void onLocationChanged(Location location) {
mListenerRef.get().onLocationChanged(location);
}
Galaxy s3 - Gps图标没有出现,它没有触发onLocationChanged方法。 (多数民众赞成)
Htc one m8 - Gps图标出现,闪烁,并解雇 onLocationChanged(但是如何?)
此时弹出问题
然后我启用了galaxy s3上的gps
(前2分钟)Gps图标出现(但不闪烁),触发onLocationChanged方法(但是如何?)
(2分钟后)出现Gps图标(闪烁),触发onLocationChanged方法
再次出现问题
答案 0 :(得分:2)
gps图标闪烁是什么意思?
- >好吧,我希望你知道GPS提供商不会在屋顶下工作。因此,完全不可能从GPS提供商那里获得位置更新。在这种情况下,如果用户启用GPS,则会出现GPS闪烁图标,通知用户它正在搜索GPS。
- >一旦找到GPS,图标就不再闪烁,你将从GPS提供商处获得位置更新。
- >静态GPS图标表示Android系统已准备好从GPS提供商发送位置更新。
Htc one m8 - Gps图标出现,闪烁,并点燃了LocChanged(但是怎么样?)
- >没有启用位置更新听起来很奇怪。我不确定你是如何确认你获得了位置更新。
- >我建议您检查GPS提供商是否已启用,然后请求更新位置。
答案 1 :(得分:1)
Fine_location权限将允许用户从gps,wifi,网络进行更新。因此,如果gps不可用仍然可以触发onlocationChange(),因为最近的位置可能已经通过wifi /网络获取。
(引自链接:http://developer.android.com/guide/topics/location/strategies.html
注意:如果您同时使用NETWORK_PROVIDER和GPS_PROVIDER,则只需要请求ACCESS_FINE_LOCATION权限,因为它包含两个提供商的权限。 (ACCESS_COARSE_LOCATION的权限仅包括NETWORK_PROVIDER的权限。 )
手机如何显示gps图标而不启用gps,我怀疑是否可能。
答案 2 :(得分:1)
使用HTC One(M7),APP有权使用GPS并使'GPS'公平游戏 - ('GPS'='GPS Spoofer',AGPS [如果允许],使用WiFi和GPS的APP [所以位置几乎总是立即可用],当然还有手机真正的硬件GPS / GLONASS / Galileo /等。)
HTC UI有一个使用GPS的应用程序图标(无论电话认为提供商是什么,一些APP检查提供商;他们不接受欺骗性地点,EG:大多数订阅APP,Google Play商店, abrev.GPS;))。
硬件GPS会显示第二个图标。它在等待足够的卫星时闪烁。在室内,没有WiFi,使用AGPS,我可以在不到1/2分钟内锁定。
你可能想在收到你的LC消息时检查错误,因为如果你超过100 M你不会真的知道你在哪里而且可能没有效果位置;来自另一个(弱)卫星的未决计算可能足以让您低于50 M错误,此时您应该开始接受该位置有效(您的APP可能想要记录带坐标的错误,然后可以用圆圈显示位置代表不确定性)。
开发时,您希望确定购买最受欢迎的手机(因此您需要真正的硬件进行测试,并支持最多的客户),并购买带有您想要Android APP的硬件的FEW手机控制 - 在您的情况下购买带有不同 GPS硬件的电话,对于其他人,他们可能需要购买一些具有不同相机硬件(或WiFi芯片等)的电话。
在Android的手机Mfgs版本,他们的用户界面以及他们的GPS硬件操作方式(以及您已经安装的其他APP,如Spoofer)之间,您有很多变量,您的程序必须兼顾并且很多情况(错误返回),它必须允许在尽可能多的设备上以相同的方式运行。