0

内部に GoogleMap を含む FragmentActivity があります。onLocationChanged でユーザーの位置を正しく受け取ります。ここでは、ユーザーの位置を使用してマップを中央に配置しようとしています。

@Override
public void onLocationChanged(Location loc)
{
  if (centerMap && mMap != null)
  {
    LatLng location = new LatLng(loc.getLatitude(), loc.getLongitude());
    CameraPosition pos = new CameraPosition.Builder().target(location).zoom(12).build();
    CameraUpdate cu = CameraUpdateFactory.newCameraPosition(pos);
    mMap.animateCamera(cu);

    // centerMap = false;
    Log.e(getClass().getSimpleName(), "lat = " + location.latitude + " long = " + location.longitude);
  }
}

このコードは実際にはときどき (おそらく 1 回だけ) 機能し、if ステートメント内にブレークポイントを配置したデバッグ セッション中にのみ機能しました。何が悪いのかわかりません。onLocationChanged メソッドは定期的に呼び出され、受信した位置をログに記録します。つまり、if 条件に入ったことが示されますが、マップは lat=0,long=0 の初期位置 (アフリカ) から 1 インチも移動しません。

手がかりはありますか?

編集:コードに何かひどく壊れたものが必要です:マーカーでさえ表示されません。マップにマーカーを追加する方法は次のとおりです

mMap.addMarker(new MarkerOptions()
                      .position(new LatLng(lat, lng))
                      .title("title")
                      .draggable(false)
                      .visible(true));

電話をかけても、「現在地」アイコンも表示されません

mMap.setMyLocationEnabled(true);

onCreate() で。火星人などを除外しようとして、Eclipse、ADT、その他すべてを利用可能な最新バージョンに更新しました。

4

1 に答える 1

0

何らかの理由で (私には不明)、マップの初期化を onCreate() から onLocationChange() の最初の呼び出しに移動すると、うまくいきました。今私の onCreate() は単純です

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);

  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      WindowManager.LayoutParams.FLAG_FULLSCREEN);

  setContentView(R.layout.map_activity);

}

私の onStart() は:

@Override
protected void onStart()
{
  super.onStart();

  // Create the LocationRequest object
  mLocationRequest = LocationRequest.create();
  // Use high accuracy
  mLocationRequest.setPriority(
        LocationRequest.PRIORITY_HIGH_ACCURACY);
  // Set the update interval to 5 seconds
  mLocationRequest.setInterval(UPDATE_INTERVAL);
  // Set the fastest update interval to 1 second
  mLocationRequest.setFastestInterval(FASTEST_INTERVAL);

   mLocationClient = new LocationClient(this, this, this);
   mLocationClient.connect();
}

@Override
public void onConnected(Bundle arg0)
{
  mLocationClient.requestLocationUpdates(mLocationRequest, this);  
}

そして私の onLocationChange() は

@Override
public void onLocationChanged(Location loc)
{
  if (mMap == null)
  {
    mapFragment = SupportMapFragment.newInstance();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager()
        .beginTransaction();
    fragmentTransaction.add(R.id.mapcontainer, mapFragment);
    fragmentTransaction.commit();

    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

    mMap.getUiSettings().setAllGesturesEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setCompassEnabled(true);
    mMap.setMyLocationEnabled(false);

    LatLng location = new LatLng(loc.getLatitude(), loc.getLongitude());
    CameraPosition pos = new CameraPosition.Builder().target(location).zoom(12).build();
    CameraUpdate cu = CameraUpdateFactory.newCameraPosition(pos);
    mMap.animateCamera(cu);

    if (mLocationClient.isConnected())
      mLocationClient.removeLocationUpdates(this);
    mLocationClient.disconnect();

    Log.e(getClass().getSimpleName(), "lat = " + location.latitude + " long = " + location.longitude);
  }
}

動作しますが、別の問題があります (マップはタッチ イベントを無視しているようです)。そのために別の質問を作成します。

于 2013-10-30T19:16:24.800 に答える