3

私は現在、Google マップ サービスに関連するプロジェクトで動いています。地図で現在地を指摘したいと思います。そのために、 itemizedoverlay を使用するというアイデアがあります。Geopoint を使用して現在地を取得します。しかし、コードで itemizedoverlay を使用すると、場所を取得できず、OnCreate メソッドでこれを使用しています。これを OnLocationChanged メソッドに移動すると、GeoPoint(point) が itemizedoverlay に取り込まれずにエラーで終了し、現状ではアプリがクラッシュします。

        MapView mapView;
    Location location;
    LocationManager locationmanager;
    LocationListener locationlistener; 

        public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

      mapView = (MapView) findViewById(R.id.mapView);
      mapView.setTraffic(true);
      mapView.setBuiltInZoomControls(true);

        //locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
   // locationlistener = new GPSLocationListener();
      //  locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER 0,0,locationlistener);                                                                                         

      GeoPoint point = new GeoPoint(
                (int) (location.getLatitude() * 1E6), 
                (int) (location.getLongitude() * 1E6));

            Toast.makeText(getBaseContext(), 
                "Latitude: " + location.getLatitude() + 
                " Longitude: " + location.getLongitude(), 
                Toast.LENGTH_SHORT).show();

      List<Overlay> mapOverlays = mapView.getOverlays();
      Drawable drawable = this.getResources().getDrawable(R.drawable.icon);


          HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
          OverlayItem overlayitem = new OverlayItem(point,"","" );
          itemizedoverlay.addOverlay(overlayitem);
          mapOverlays.add(itemizedoverlay);

}

/*      private class GPSLocationListener implements LocationListener 
      {
        @Override
        public void onLocationChanged(Location location) {
          if (location != null) {
            GeoPoint point = new GeoPoint(
                (int) (location.getLatitude() * 1E6), 
                (int) (location.getLongitude() * 1E6));

            Toast.makeText(getBaseContext(), 
                "Latitude: " + location.getLatitude() + 
                " Longitude: " + location.getLongitude(), 
                Toast.LENGTH_SHORT).show();

            OverlayItem overlayitem = new OverlayItem(point,"","" );
              itemizedoverlay.addOverlay(overlayitem);
              mapOverlays.add(itemizedoverlay);

}
        } */


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {

Toast.makeText(getBaseContext(),"GPS Disabled",Toast.LENGTH_SHORT).show();      

    }

    @Override
    public void onProviderEnabled(String provider) {

        Toast.makeText(getBaseContext(),"GPS Enabled",Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

これに対する解決策を教えてください。事前に感謝し、ここで間違いを犯した場合は申し訳ありません.

4

4 に答える 4

2

com.google.android.maps.MyLocationOverlay を使用すると、マップ ビューに現在地が自動的に表示されます。旅行中にあなたの場所を更新することさえできます。

注: パフォーマンスを向上させるために、それぞれ onResume と onPause で enableMyLocation と disableMyLocation の呼び出しを表示します。

@Override
    protected void onResume() {
        super.onResume();
        if (locationOverlay != null)
            locationOverlay.enableMyLocation();
    }

    @Override
    protected void onPause() {
        if (locationOverlay != null)
            locationOverlay.disableMyLocation();
        super.onPause();
    }

編集済み

MyLocationOverlay locationOverlay;

public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      mapView = (MapView) findViewById(R.id.mapView);
      mapView.setTraffic(true);
      mapView.setBuiltInZoomControls(true);
locationOverlay = new MyLocationOverlay(this, mapView);
List<Overlay> mapOverlays = mapView.getOverlays();
 mapOverlays.add(locationOverlay);
}

onResume() および onPause() メソッドも追加します。

于 2013-01-21T12:33:56.827 に答える
2

これで試してください -

/**
* Setting Google Map to provided location 
*/
 private void setMaptoLocation(Location location) {
  mapView.setBuiltInZoomControls(true);
  mapView.setSatellite(true);
  int LAT = (int)(location.getLatitude() * 1E6) ;
  int LNG = (int)(location.getLongitude() * 1E6) ;
  GeoPoint point = new GeoPoint(LAT, LNG);
  mapController = mapView.getController();
  List<Overlay> mapOverlays = mapView.getOverlays();
  Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
  OverlayItem overlayitem = new OverlayItem(point,"","" );
  itemizedoverlay.addOverlay(overlayitem);
  mapOverlays.add(itemizedoverlay);
  mapController.setZoom(ZOOM_LEVEL - ZOOM_LEVEL / 2); // Set zoom level per requierment
  mapController.animateTo(point);

 }
于 2013-01-21T12:31:54.963 に答える
0

私はあなたが一緒に行かなければならないと思いますGoogle Maps Android API v2

詳細については、Google Maps AndroidAPIv2を確認してください。

上記のリンクからサンプルコードのリンクを確認してください。 サンプルコード

于 2013-01-21T12:23:01.857 に答える
0

場所はonCreate()であなたが初期化する場所ではないので、nullだと思います。もう1つ、緯度と経度を取得すると、アイテム化された場所がマップ上に確実に表示されます。マニフェストでアクセス許可が必要なAccess_Course_locationAccess_fine_locationを確認します。

于 2013-01-21T12:30:12.170 に答える