1

在我的应用程序中,我正在地图上绘制路线路径,我正在移动并固定源和目的地。所以我使用 LocationManager 类来获取位置更新myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new myLocationListener());。我走了 10 米的距离,没有完成位置更新。所以为了检查我的代码。我只是将功能放在 onStatusChanged 函数中(因为它至少被调用一次)。我运行应用程序 onStatusChanged 被调用。我的问题是什么pin the source and destination and route drawing class called continuously even though the onStatusChanged is not called。和pin is not pointed and root is not drawn even though their class is called

我的代码:

public class Map extends MapActivity 
  {  
    // class for pin the location 
class MapOverlay extends com.google.android.maps.Overlay
    {
      ............
      Log.e("loc","true");
    }
   public void onCreate(Bundle savedInstanceState) 
   {
      .................. 
      myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new myLocationListener());        
   }
@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

class myLocationListener implements LocationListener {
    public void onLocationChanged(Location loc) {       
    }
    ........
   public void onStatusChanged(String provider, int status, Bundle extras) {
     Log.e("MAP","onStatusChanged - called");
     ....// finding lat and lng getting.
     Log.e("Updated Location",""+latPointDst+" , "+lngPointDst);
      ..........
      // here i called MyOverlay class -- root drawing.
      // here i called MapOverlay class  -- pin the location
   }  

} 

 public class MyOverlay extends Overlay {
  .............
  Log.e("location change","drawing");
  }

}

我的日志猫:

 05-30 13:29:54.653: ERROR/MAP(3850): onStatusChanged - called
 05-30 13:29:54.673: ERROR/Updated Location(3850): 9.909228086471558 , 78.10081958770752
 05-30 13:29:54.743: ERROR/loc(3850): true
 05-30 13:29:54.783: ERROR/loc(3850): true
 05-30 13:29:54.793: ERROR/loc(3850): true
 05-30 13:29:54.803: ERROR/loc(3850): true
 05-30 13:29:54.813: ERROR/location change(3850): drawing
 05-30 13:29:54.983: ERROR/loc(3850): true
 05-30 13:29:54.993: ERROR/loc(3850): true
 05-30 13:29:54.993: ERROR/loc(3850): true
 05-30 13:29:55.003: ERROR/loc(3850): true
 05-30 13:29:55.013: ERROR/location change(3850): drawing
 05-30 13:29:55.193: ERROR/loc(3850): true
 05-30 13:29:55.203: ERROR/loc(3850): true
 05-30 13:29:55.223: ERROR/loc(3850): true
 05-30 13:29:55.233: ERROR/loc(3850): true
 05-30 13:29:55.243: ERROR/location change(3850): drawing
 05-30 13:29:55.473: ERROR/loc(3850): true
 05-30 13:29:55.483: ERROR/loc(3850): true
 05-30 13:29:55.573: ERROR/loc(3850): true
 05-30 13:29:55.603: ERROR/loc(3850): true
 05-30 13:29:55.633: ERROR/location change(3850): drawing
 05-30 13:29:55.693: ERROR/loc(3850): true

等等。我在 statuschanged 内编写类调用,但我不知道如何在不改变状态的情况下连续调用...... 如果我错了,请协助满足我的需要。请帮我。

4

1 回答 1

0

我认为您需要在这里关注两件事:

1 - 您不应该依赖 onStatusChanged 来获取最近的位置。该方法被调用时

  • 提供者状态改变。
  • 提供者无法获取位置,或者如果提供者在一段时间不可用后最近变得可用。

获取最新位置更改的唯一方法是在 onLocationChanged 中。

2-overlay的draw方法会被调用很多。您不应该依赖该方法来添加标记。您可以在 draw 方法之外向叠加层添加标记。当您填充叠加层或使地图无效时,您添加到叠加层的任何标记都将显示在地图上。无需在 draw 方法中添加标记。

正如您从此处接受的答案中所见,在 Google Maps 上绘制一条线/路径,draw() 方法用于在 2 个地理点之间绘制一条路径。如果您想在地图上添加标记(图钉),您可以在叠加层上执行此操作,请参阅此答案How to clear / reset an ItemizedOverlay in Android? 有关如何向地图添加标记的更多信息。

于 2011-05-30T08:37:12.903 回答