1. ホーム
  2. android

[解決済み] Googleマップで現在地を取得する方法 Android

2022-03-01 16:14:55

質問

実は私の問題は、現在地の緯度と経度を取得できないことです。私は、この質問がSOで既に質問されていることを知っていますし、私はその答えも試してみましたが、それでも私はanswer.Pleaseを取得できませんでした私を助けてください。 コード

    if (googleMap == null) {
        googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                R.id.map)).getMap();

        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
    }
    googleMap.setMyLocationEnabled(true);
    Location myLocation = googleMap.getMyLocation();  //Nullpointer exception.........
    LatLng myLatLng = new LatLng(myLocation.getLatitude(),
            myLocation.getLongitude());

    CameraPosition myPosition = new CameraPosition.Builder()
            .target(myLatLng).zoom(17).bearing(90).tilt(30).build();
    googleMap.animateCamera(
        CameraUpdateFactory.newCameraPosition(myPosition));

解決方法は?

のサンプルコードをご確認ください。 Google Maps Android API v2 . これを使用することで問題を解決できます。

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the map.
    if (mMap == null) {
        // Try to obtain the map from the SupportMapFragment.
        mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
        mMap.setMyLocationEnabled(true);
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
                @Override
                public void onMyLocationChange(Location arg0) {
                    mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!"));
                }
            });
        }
    }
}

でこの関数を呼び出します。 onCreate 関数を使用します。

更新しました。

mMap.setOnMyLocationChangeListener メソッドは非推奨となりましたので、このメソッドを使用する必要があります。 FusedLocationProviderClient を追加しました。

private FusedLocationProviderClient fusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

最後に確認した場所を要求するには、getLastLocation() メソッドを呼び出します。次のコードは、リクエストとレスポンスの簡単な処理を示しています。

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

参考 https://developer.android.com/training/location/retrieve-current.html