2011-10-06 65 views
2

有没有人有任何想法加快设置Google地图初始点的过程,并以您当前的位置为中心。这必须是可能的,因为它工作在自带谷歌地图应用不错,但在我的自定义应用程序明显的延迟,我现在用:Android:myLocationOverlay.runOnFirstFix太慢

myLocationOverlay.runOnFirstFix(new Runnable() { 
     public void run() {    
      findMe(); 
     }   
    }); 

哪里找到我,包括:

if(myLocationOverlay.getMyLocation() != null){ 
    mapView.getController().animateTo(myLocationOverlay.getMyLocation()); 
} 

回答

1

至于我知道,原生地图服务和应用程序正在系统启动时加载,并在后台自行准备,因此可以更快地加载地图。您可以在设置中的正在运行的进程中检查它。您云做同样的事情或做一个肮脏的解决方法,我做了一次:在所有加载之前显示进度对话框(在onLoad中的setContentView之后),并在完成地图上的所有操作后关闭它;)

+0

听起来不错,但有没有办法从该后台服务获取位置? – Moustachio

+0

当然。您需要从第一个活动或[启动](http://androidgps.blogspot.com/2008/09/starting-android-service-at-boot-time.html)在后台启动服务(在清单中定义,创建服务连接和AIDL接口)。该服务将提供诸如getLatitude()getLongitude()之类的方法作为像Double这样的基元。该服务将不得不注册LocationListener。为进一步阅读:[AIDL](http://developer.android.com/guide/developing/tools/aidl.html),[服务](http://developer.android.com/reference/android/app/Service .html) –

1

您是否仅使用GPS位置?如果您根据网络位置请求当前位置,并接受一些陈旧的值(最多可能需要一个小时?),则应立即获得用户的位置。

+0

您将如何为“myLocationOverlay”设置网络服务?正如我想象的那样,时间问题是由于等待所有服务变得可用? – Moustachio

+0

您仍然可以像以前一样收听GPS位置事件。但是,当您的活动开始使用LocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)提供的位置值时,您可以立即运行findMe(),而不是等待第一次GPS修复。您当然也可以尝试检查最后一个已知的GPS_PROVIDER位置是否可用,对您而言是不是太旧。 如果您不关心准确的位置,但网络位置对您来说足够好,您可以注册您的LocationListener以进行NETWORK_PROVIDER更新。 –