1

私のアプリでは、移動中の地図上にルート パスを描画し、移動元と移動先をピン留めしています。だから私は LocationManager クラスを使用して、位置の更新を取得しますmyManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new myLocationListener());。私は 10 メートルの距離に行きますが、位置情報の更新は行われません。私のコードをチェックするために。onStatusChanged 関数に機能を追加しただけです (少なくとも 1 回は呼び出されるため)。アプリを実行すると、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");
  }

}

私のlogcat:

 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

等々。on statuschanged 内で呼び出すクラスを作成しますが、on status changed なしで継続的に呼び出される方法がわかりません.. 私が間違っている場合は、私の必要を満たすのを手伝ってください。私を助けてください。

4

1 に答える 1

0

ここで2つのことに集中する必要があると思います:

1 - 最近の場所を取得するために onStatusChanged に依存しないでください。このメソッドは次の場合に呼び出されます

  • プロバイダーのステータスが変わります。
  • プロバイダーが場所を取得できない場合、またはプロバイダーが一定期間利用できなくなった後、最近利用可能になった場合。

最新の場所の変更を取得する唯一の方法は、onLocationChanged を使用することです。

2 - オーバーレイの描画メソッドがたくさん呼び出されます。マーカーを追加するためにその方法に頼るべきではありません。draw メソッドの外でオーバーレイにマーカーを追加できます。オーバーレイにデータを追加するか、マップを無効にすると、オーバーレイに追加したマーカーがマップ上に表示されます。draw メソッドにマーカーを追加する必要はありません。

ここで受け入れられた回答からわかるように、Google マップで線/パスを描画します。 draw() メソッドは、2 つのジオポイント間のパスを描画するために使用されます。マップにマーカー (ピン) を追加する場合は、オーバーレイで行うことができます。この回答を参照してくださいAndroid で ItemizedOverlay をクリア/リセットするには? 地図にマーカーを追加する方法の詳細については。

于 2011-05-30T08:37:12.903 に答える