Не удается получить геопоинт при использовании класса MyLocationOverlay - PullRequest
0 голосов
/ 07 февраля 2012

Я не могу отметить текущее местоположение ... Приложения всегда получают сообщение "Не удается определить местоположение". Я запускаю приложение на Samsung galaxy mini и включаю GPS: (

Класс FixedMyLocationOverlay

открытый класс FixedMyLocationOverlay extends MyLocationOverlay { частный логический ошибка = ложь; Частный Drawable Drawable; частная точность краскиPaint; частный центр Point; личная точка слева; private int width; частный int высота;

  public FixedMyLocationOverlay(Context context, MapView mapView) {
      super(context, mapView);
  }

  @Override
  protected void drawMyLocation(Canvas canvas, MapView mapView,
          Location lastFix, GeoPoint myLocation, long when) {
      if(!bugged) {
          try {
              super.drawMyLocation(canvas, mapView, lastFix, myLocation, when);
          } catch (Exception e) {
              // we found a buggy phone, draw the location icons ourselves
              bugged = true;
          }
      }

      if(bugged) {
          if(drawable == null) {

              accuracyPaint = new Paint();
              accuracyPaint.setAntiAlias(true);
              accuracyPaint.setStrokeWidth(2.0f);

              drawable = mapView.getContext().getResources().getDrawable(R.drawable.here);
              width = drawable.getIntrinsicWidth();
              height = drawable.getIntrinsicHeight();
              center = new Point();
              left = new Point();
          }

          Projection projection = mapView.getProjection();
          double latitude = lastFix.getLatitude();
          double longitude = lastFix.getLongitude();
          float accuracy = lastFix.getAccuracy();

          float[] result = new float[1];

          Location.distanceBetween(latitude, longitude, latitude, longitude + 1, result);
          float longitudeLineDistance = result[0];

          GeoPoint leftGeo = new GeoPoint((int)(latitude*1e6), (int)((longitude-accuracy/longitudeLineDistance)*1e6));
          projection.toPixels(leftGeo, left);
          projection.toPixels(myLocation, center);
          int radius = center.x - left.x;

          accuracyPaint.setColor(0xff6666ff);
          accuracyPaint.setStyle(Style.STROKE);
          canvas.drawCircle(center.x, center.y, radius, accuracyPaint);

          accuracyPaint.setColor(0x186666ff);
          accuracyPaint.setStyle(Style.FILL);
          canvas.drawCircle(center.x, center.y, radius, accuracyPaint);

          drawable.setBounds(center.x - width/2, center.y - height/2, center.x + width/2, center.y + height/2);
          drawable.draw(canvas);
      }
  }
}

Код активности

открытый класс atm_atmogan расширяет MapActivity {

  private MapView mapView;
  private MyLocationOverlay myLocationOverlay;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.atm_atmogan); 


      mapView = (MapView) findViewById(R.id.map_view);
      mapView.setBuiltInZoomControls(true);
      myLocationOverlay = new FixedMyLocationOverlay(this, mapView);

      mapView.getOverlays().add(myLocationOverlay);
      mapView.postInvalidate();
      zoomToMyLocation();
    }

    @Override
  protected void onResume() {
      super.onResume();
      myLocationOverlay.enableMyLocation();
  }

  @Override
  protected void onPause() {
      super.onPause();
      myLocationOverlay.disableMyLocation();
  }


  private void zoomToMyLocation() {
      GeoPoint myLocationGeoPoint = myLocationOverlay.getMyLocation();
      if(myLocationGeoPoint != null) {
          mapView.getController().animateTo(myLocationGeoPoint);
          mapView.getController().setZoom(18);
      }
      else {
          Toast.makeText(this, "Cannot determine location", Toast.LENGTH_SHORT).show();
      }
  }

  @Override
  protected boolean isRouteDisplayed() {
      return false;
  }
}

1 Ответ

0 голосов
/ 08 февраля 2012

Вам нужно будет узнать ваше фактическое местоположение с помощью класса / интерфейса Location Manager.

Этот учебник охватит все, что вам нужно знать об этом http://www.vogella.de/articles/AndroidLocationAPI/article.html

надеюсь, это поможет

...