2016-09-22 10 views
-1

私はアンドロイドの初心者です。私はアンドロイドを学ぶために最善を尽くしています。私は、Googleマップを使用してユーザーの場所を識別するアンドロイドアプリケーションを作成しようとしています。しかし、私はユーザーの所在地を特定することができましたが、期待通りのものではありませんでした。アンドロイドのユーザー位置を特定してください

次の図のように、デフォルトの場所が表示されます。左上のボタンをクリックすると、地図に自分の位置が表示されます。

enter image description here

私はボタンをクリックせずに、すぐに私の場所を知っていただきたいと思います。また、私はユーザーの場所を知り、経度と緯度の値ではなく文字列に格納したいと思います。どんな助け?

コード:

package com.example.lalinda.googlemap1; 

import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     mMap.setMyLocationEnabled(true); 
    } 
} 
+0

あなたはすでに誰も同じ質問をしていないと思いますか? – Selvin

+0

[AndroidマシュマロでGoogleマップ上の現在地を表示するにはどうすればいいですか?](http://stackoverflow.com/questions/34582370/how-can-i-show-current-location-on-a-google -map-on-android-marshmallow) –

+0

@DanielNugentあなたの答えに続いて、私のアプリケーションがクラッシュしています。ライブラリを追加する必要はありますか? –

答えて

1

グーグルマップは、ユーザーのlastKnownLocation場所のためを使用していますlastknownLocationが不明な場合、それは別のプロバイダを介して位置を取得するために時間がかかるGPSNetworkを言います。 lastKnownLocationをベースロケーションとして使用し、LocationListenerでアップデートすることをお勧めします。

 @Override 
     public void onMapReady(GoogleMap googleMap) { 
     if (ActivityCompat.checkSelfPermission 
       (this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
       && 
       ActivityCompat.checkSelfPermission 
         (this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
     { 
      requestPermissions(new String[]{ 
        Manifest.permission.ACCESS_COARSE_LOCATION, 
        Manifest.permission.ACCESS_FINE_LOCATION 
      }, 1); 

     } 
     else { 

      // enable location buttons 
      googleMap.setMyLocationEnabled(true); 
      googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

      // fetch last location if any from provider - GPS. 
      final LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
      final Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      //if last known location is not available 
      if (loc == null) { 

       final LocationListener locationListener = new LocationListener() { 
        @Override 
        public void onLocationChanged(final Location location) { 
         clearMap(googleMap); // clear map for every new location to update your marker unless `n` number of markers will form. 
         // getting location of user 
         final double latitude = location.getLatitude(); 
         final double longitude = location.getLongitude(); 
         final LatLng userCurrentLocation = new LatLng(latitude, longitude); 
         //focus added here **edited** 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userCurrentLocation, 14)); 

         googleMap.addMarker(new MarkerOptions() 
         .position(userCurrentLocation) 
         .draggable(true) 
     .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_marker_icon_from_deawable))); 
         //do something with Lat and Lng, Parse to String if u want or set marker. 

        } 

        @Override 
        public void onStatusChanged(String provider, int status, Bundle extras) { 
        } 

        @Override 
        public void onProviderEnabled(String provider) { 
         //when user enables the GPS setting, this method is triggered. 
        } 

        @Override 
        public void onProviderDisabled(String provider) { 
         //when no provider is available in this case GPS provider, trigger your gpsDialog here. 
        } 
       }; 

       //update location every 10sec in 500m radius with both provider GPS and Network. 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10*1000, 500, locationListener); 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 500, locationListener); 
      } 
      else { 
       //do something with last known location. 
       // getting location of user 
       final double latitude = loc.getLatitude(); 
       final double longitude = loc.getLongitude(); 
       final LatLng userCurrentLocation = new LatLng(latitude, longitude); 

       //focus added here **edited** 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userCurrentLocation, 14)); 

       googleMap.addMarker(new MarkerOptions() 
       .position(userCurrentLocation) 
       .draggable(true) 
     .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_marker_icon_from_deawable))); 
      } 
      } 
     } 

許可取扱い:

 @Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    switch (requestCode) { 

     case 1: 
      if (grantResults[0] != PackageManager.PERMISSION_GRANTED){ 
       //do something 
      } 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

この例は、単なるデモンストレーション(例の目的)のためであり、私は方法を使って、自分のコードを最適化されていませんでした。今後編集してください。

+0

は、メソッド 'clearMap'と 'your_marker_icon_from_deawable'を解決できません。どのような授業を含めるべきですか? –

+0

は 'clearMap()'の代わりに 'googleMap.clear();'を使用しています(その関数とiはコードを追加するのを忘れていました)。 'your_marker_icon_from_deawable'はdrawableフォルダのアイコンを追加して、 drawable.name_of_your_image' – W4R10CK

+0

あなたのコードは正常に動作しますが、依然として左上隅のボタンをクリックする必要があります。 –

関連する問題