2016-04-24 19 views
0

私はGoogleマップ上のユーザーの現在の位置を表示したいと思いますが、今のところ私は場所を表示できません。私はコードを書いている断片があります。Googleマップはandoridの現在の位置を表示していませんか?

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.fragment_home, container, false); 

     initGamp(rootView); 



     // Inflate the layout for this fragment 
     return rootView; 
    } 

initgmap機能

public void initGamp(View root) { 

     SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     // check if map is created successfully or not 


    } 


@Override 
    public void onMapReady(GoogleMap googleMap) { 

     mMap = googleMap; 

     // Add a marker in Sydney, Australia, and move the camera. 
//  LatLng sydney = new LatLng(-34, 151); 
//  mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
//  mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
     if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      // TODO: Consider calling 
      // ActivityCompat#requestPermissions 
      // here to request the missing permissions, and then overriding 
      // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      //           int[] grantResults) 
      // to handle the case where the user grants the permission. See the documentation 
      // for ActivityCompat#requestPermissions for more details. 
      return; 
     } 
     Log.i("MAP","BEFORE LOCATION"); 
     mMap.setMyLocationEnabled(true); 
     mMap.getUiSettings().setMyLocationButtonEnabled(true); 
     Log.i("MAP", "AFTER LOCATION"); 
     LocationManager locationManager = (LocationManager) getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     String bestProvider = locationManager.getBestProvider(criteria, true); 
     Location location = locationManager.getLastKnownLocation(bestProvider); 
     if (location != null) { 
      Toast.makeText(getActivity().getApplicationContext(),"not null",Toast.LENGTH_SHORT).show(); 
      onLocationChanged(location); 
     } 
     locationManager.requestLocationUpdates(bestProvider, 20, 0, this); 

     Log.i("MAP", "END LOCATION"); 



    } 

    @Override 
    public void onLocationChanged(Location location) { 

     Log.i("MAP","CHANGE LOCATION"); 
     Toast.makeText(getActivity().getApplicationContext(),"chnage",Toast.LENGTH_SHORT).show(); 
     mMap.clear(); 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     LatLng latLng = new LatLng(latitude, longitude); 
     mMap.addMarker(new MarkerOptions().position(latLng)); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 


    } 

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


    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 

すべての権限:

<!-- Required to show current location --> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 

コードの上、私は場所を示すために使用されてきたが、私はworking.Iは、現在のボタンがありませんまだ私は現在の場所を取得していないタップで位置ボタン。

+0

あなたはマニフェストに許可を与えています? –

+0

はい@VivekMishraを投稿しました – Techiee

+0

実行時にロケーションの権限をリクエストしていないようです。http://stackoverflow.com/questions/34582370/how-can-i-use-google-maps-and -locationmanager-to-show-current-location-on-androi/34582595 –

答えて

0

ここでのキーは、位置更新を要求する前にonMapReady()コールバックが発生するまで待機することです。このインターフェイスのインスタンスがMapFragmentまたはMapViewオブジェクトに設定されると、onMapReady(GoogleMap)メソッドがマップの使用準備ができたときにトリガーされ、GoogleMapのnull以外のインスタンスが提供されます。

ここでは、必要な作業を行う完全なアクティビティコードを示します。アクティビティがロードされたときに、各ロケーション変更イベントが発生したときに、ロケーションリスナを登録します。ここで

はサンプルアクティビティコードです:

public class MainActivity extends AppCompatActivity implements 
OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks,  GoogleApiClient.OnConnectionFailedListener, LocationListener { 

LocationRequest mLocationRequest; 
GoogleApiClient mGoogleApiClient; 

LatLng latLng; 
GoogleMap mGoogleMap; 
SupportMapFragment mFragment; 
Marker currLocationMarker; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

mFragment = (SupportMapFragment)  getSupportFragmentManager().findFragmentById(R.id.map); 
mFragment.getMapAsync(this); 
} 

@Override 
public void onMapReady(GoogleMap gMap) { 
mGoogleMap = gMap; 
mGoogleMap.setMyLocationEnabled(true); 

buildGoogleApiClient(); 

mGoogleApiClient.connect(); 

} 

protected synchronized void buildGoogleApiClient() { 
Toast.makeText(this,"buildGoogleApiClient",Toast.LENGTH_SHORT).show(); 
mGoogleApiClient = new GoogleApiClient.Builder(this) 
.addConnectionCallbacks(this) 
.addOnConnectionFailedListener(this) 
.addApi(LocationServices.API) 
.build(); 
} 

@Override 
public void onConnect 
+0

コードが不完全です – Techiee

+1

http://stackoverflow.com/a/33741294/4409409 –

関連する問題