map.setMyLocationEnabled(true) 究竟是做什么的?

25

我正在进行设置:

map.setMyLocationEnabled(true)

但我想知道这个功能具体是做什么的。我所知道的是:

  1. 我会在地图的右上角得到一个定位按钮
  2. 我会在地图上看到一个蓝色图标,代表我的当前位置

我的担忧是,我正在开发一个位置感知应用,但我担心它会消耗电量。在我的应用程序的其他地方(通过首选项),我设置了一个LocationManager并监听位置事件以便记录它们。但我可以设置获取位置更新的精确度和间隔时间。

当我关闭我的LocationManager时:

locationManange.removeUpdates(LocationListener listener);

我希望能够关闭整个应用程序的位置服务。但是,我仍然可以看到手机标题栏中的小GPS图标,表示该应用程序正在获取位置更新。我知道这是因为我在地图视图上设置了它:

map.setMyLocationEnabled(true);

我最初认为,如果您没有通过设置LocationManager来监听位置更新,则调用map.setMyLocationEnabled(true)将不起作用(即没有我的位置图标或按钮)。但是事实并非如此。

这是否意味着调用map.setMyLocationEnabled(true)时,谷歌正在使用自己的LocationManager及其自己的设置?我真的想调用map.setMyLocationEnabled(true),但希望它使用我的位置更新设置而不是谷歌在幕后执行的任何操作。是否可能?我在文档中错过了什么吗?当我调用map.setMyLocationEnabled(true)时,无法找到有关LocationManager设置的准确性或间隔的任何信息。


在调用removeUpdates()之后,您确定GPS更新不是由其他应用程序引起的吗?(例如Google地图本身或其他任何应用程序)。您是否尝试在卸载您的应用程序时进行此操作? - xav
是的,我确定。如果我删除代码中的一行'map.setMyLocationEnabled(true);',GPS就会关闭。 - lostintranslation
1个回答

14
这是关于编程的问题。以下是需要翻译的内容:

这是否意味着通过调用map.setMyLocationEnabled(true),谷歌正在使用自己的LocationManager和自己的设置?

不完全是这样。默认情况下,Maps V2 使用LocationClient

我真的想调用map.setMyLocationEnabled(true),但希望它使用我的位置更新设置,而不是谷歌在幕后做的任何事情。这可能吗?

您可以使用setLocationSource()提供自己的位置数据,以供my-location层使用。 这里是一个演示项目


你的示例还设置了LocationManager。LocationManager能否在代码的其他位置设置?在我的地图代码中,我实现了你所说的一切,但是没有设置位置管理器,因此我从未收到位置更新。基本上,我有其他代码实现了LocationListener并设置了LocationManager,因为我也在地图视图之外获取位置更新。 - lostintranslation
我想我知道我需要做什么。它应该可以工作。明天我会发布我的代码,以防其他人有类似的问题。谢谢@CommonsWare。 - lostintranslation
@lostintranslation:“LocationManager可以在代码的其他位置设置吗?”--原则上,当然可以。只是我没有其他的代码。:-) 只要您可以在需要时将位置传递到您的GoogleMap,您在代码中拥有LocationListener的位置实际上并不重要。例如,您可以使用事件总线(例如LocalBroadcastManager、Square的Otto、greenrobot的EventBus)。 - CommonsWare
1
@AviPatel:使用LocationManager或Play服务的融合位置提供程序获取设备的位置。然后,使用GoogleMap上的方法将“相机”移动到该位置以指向地图。 - CommonsWare
1
据我所知,Google希望您使用融合位置提供程序,这就是为什么他们废弃并停用了“getMyLocation()”选项的原因。 - CommonsWare
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接