Android 谷歌地图使用 GPS 定位而不是网络

Posted

技术标签:

【中文标题】Android 谷歌地图使用 GPS 定位而不是网络【英文标题】:Android google maps use GPS location NOT network 【发布时间】:2012-03-24 19:47:26 【问题描述】:

在我的应用程序中,我想获取用户的位置并将其显示在地图(谷歌地图)上。 在安卓设备的设置中,您可以检查

    使用无线网络 使用 GPS 卫星

当用户启动 mapactivity 时,我会显示一个对话框,用户可以在其中选择是否获取当前位置。

Old code deleted

如果用户想要获取他的位置,我会检查 gps 是否已启用。如果没有,我开始设置。否则我会尝试获取位置。但即使 GPS 处于活动状态并“使用无线网络”,他也不会获得位置。是否有解决方案来检查“使用无线网络”是否已启用。或者我需要更改代码的哪一部分才能仅通过 GPS 信号获取位置?

谢谢

编辑我的当前代码:

boolean isGps = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
                boolean isNetwork = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

                if(!isGps && !isNetwork)
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(intent);
                 else if(isGps && !isNetwork) 
                    String bestProvider = LocationManager.GPS_PROVIDER;
                    Location location = lm.getLastKnownLocation(bestProvider);


                    Toast.makeText(MapsTabActivitiy.this, "Location niet beschikbaar.", Toast.LENGTH_SHORT).show();
                 else if(!isGps && isNetwork) 
                    String bestProvider = LocationManager.NETWORK_PROVIDER;
                    Location location = lm.getLastKnownLocation(bestProvider);

                    if(location == null)
                        location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                     else if (location != null)
                        mapcontroller.animateTo(new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6)));
                        mapcontroller.setZoom(15);
                    
                
                else 
                    Criteria criteria = new Criteria();
                    criteria.setAccuracy(Criteria.ACCURACY_FINE);
                    String bestProvider = lm.getBestProvider(criteria, false);
                    Location location = lm.getLastKnownLocation(bestProvider);

                    if(location == null)
                        location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                     else if (location != null)
                        mapcontroller.animateTo(new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6)));
                        mapcontroller.setZoom(15);
                    
                

所以我使用 isProviderEnabled 检查 GPS_PROVIDER 和 NETWORK_PROVIDER。如果我改变了获取位置的方式,则使用 if,否则。我需要找到的唯一案例是案例 2(否则 if(isGps && !isNetwork))。通过 GPS 信号获取位置。

【问题讨论】:

【参考方案1】:

您正在使用Criteria 类获得正确的提供程序,但您可以简单地使用LocationManager.GPS_PROVIDER 来请求仅使用 GPS 的位置更新。改变

String bestProvider = lm.getBestProvider(criteria, false);

String bestProvider = LocationManager.GPS_PROVIDER;

希望这会有所帮助。

【讨论】:

不,现在即使选中“使用无线网络”,他也找不到我的位置 @TimonDevos,“使用 gps 卫星”检查了吗? 但我希望设备在运行时选择更准确的位置。如果我使用 LocationManager.GPS_PROVIDER 那么设备不会选择?只有当 NETWORK_PROVIDER 未启用时,他才需要从 GPS¨PROVIDER 获取位置,反之亦然 @TimonDevos,您可以使用 LocationManager.isProviderEnabled() 方法来确定提供程序当前是否可用。将它与 Criteria 类一起使用以查找当前可用的最准确的提供程序。 通过 GPS 获取位置是否可能需要一段时间?

以上是关于Android 谷歌地图使用 GPS 定位而不是网络的主要内容,如果未能解决你的问题,请参考以下文章

android定位城市

谷歌地图包含Android上的位置

android - eclipse:使用使用 gps 获得的坐标显示谷歌地图

android 版百度地图如何通过定位功能获得当前的位置所在的城市?

在谷歌地图android中使用gps移动标记

如何使用自己的地图而不是谷歌地图?