首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyLocationOverlay: getMyLocation返回null

MyLocationOverlay: getMyLocation返回null
EN

Stack Overflow用户
提问于 2010-07-15 16:48:10
回答 4查看 12.3K关注 0票数 1

我有一个显示地图中当前位置的mapview页面。

为此,我使用了MyLocationOverlay。代码如下:

代码语言:javascript
复制
myLocationOverlay = new MyLocationOverlay(this, mapView);
myLocationOverlay.enableCompass();
myLocationOverlay.enableMyLocation();

myLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
 geopoint = myLocationOverlay.getMyLocation();
 ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable);
 try{
  overlayitem = new OverlayItem(geopoint, "", "");
 }
 catch(Exception e){
  e.printStackTrace();
 }
 itemizedoverlay.addOverlay(overlayitem);
 mapOverlays.add(itemizedoverlay);
 mapController.animateTo(geoPoint);

 }
});

上面的代码通过gps获取当前位置,并在该位置设置一个标记。

但是try块中的代码才是问题所在。我在geopoint中得到了空值。

实际上,我必须得到那个点,并做一些距离和所有的计算。为此,我必须在该geopoint中获取正确的值。

谁能告诉我这个问题的解决方案?

EN

回答 4

Stack Overflow用户

发布于 2010-08-17 17:13:26

我已经研究这个问题一天了,下面是我的发现。出于某种原因,这是可行的

代码语言:javascript
复制
LocationManager lm;
GeoPoint gp;        

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLoc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

if (lastKnownLoc != null){
  int longTemp = (int)(lastKnownLoc.getLongitude()* 1000000);
  int latTemp = (int)(lastKnownLoc.getLatitude() * 1000000);
  gp =  new GeoPoint(latTemp, longTemp);
}

但这并不是

代码语言:javascript
复制
gp = myLocOverlay.getMyLocation();
票数 1
EN

Stack Overflow用户

发布于 2010-10-12 18:04:16

跟踪当前位置可以通过使用MyLocationOverlay类和通过LocationManager来完成。使用MyLocationOverlay,下面的代码可以正常工作。

代码语言:javascript
复制
MyLocationOverlay myLocationOverlay;
MapView mapView;
MapController mapcontroller;
OverlayItem overlayitem;
List<Overlay> mapoverlays;
GeoPoint geopoint;

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.currentlocation);

  mapView = (MapView) findViewById(R.id.map);

  mapView.setBuiltInZoomControls(true);
  mapView.setSatellite(false);
  mapView.setStreetView(true);
  mapView.setTraffic(true);

  mapcontroller = mapView.getController();
  mapoverlays = mapView.getOverlays();
  drawable = this.getResources().getDrawable(R.drawable.ic_map_red);
  mapView.invalidate();

  getCurrentLocation();             
}

public void getCurrentLocation(){  

   myLocationOverlay = new MyLocationOverlay(this, mapView);
   myLocationOverlay.enableCompass();
   myLocationOverlay.enableMyLocation();
   myLocationOverlay.runOnFirstFix(new Runnable() {

     public void run() {

   ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable);

   try {
    latitude = myLocationOverlay.getMyLocation().getLatitudeE6();
    longitude = myLocationOverlay.getMyLocation().getLongitudeE6();
            geopoint = new GeoPoint((int) (latitude), (int) (longitude));
    overlayitem = new OverlayItem(geopoint, "", "");
    itemizedoverlay.addOverlay(overlayitem);
    mapoverlays.add(itemizedoverlay);
    mapcontroller.animateTo(geopoint);
    mapcontroller.setZoom(16);
   } 
   catch (Exception e) {}
    }           
  });       
}
票数 0
EN

Stack Overflow用户

发布于 2011-10-10 07:08:11

如果覆盖:

代码语言:javascript
复制
onLocationChanged();

别忘了打电话:

代码语言:javascript
复制
super.onLocationChanged();

在您自己的代码之后或之前。这将确保变量

代码语言:javascript
复制
getMyLocation()

返回的值不为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3253907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档