2017-04-04 114 views
0

我試圖在Android上啓用谷歌地圖中的自動定位功能,我添加的代碼谷歌地圖GeoLocation中不工作

mMap.setMyLocationEnabled(真); mMap.getUiSettings()。setMyLocationButtonEnabled(true);

啓用該功能,但對於位置的藍點會顯示不出來,任何幫助表示讚賞

package com.example.runnable; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.location.Criteria; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 

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; 

import static com.example.runnable.R.id.map; 

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // 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; 

     // Add a marker in Sydney and move the camera 
     mMap.addMarker(new MarkerOptions().position(new LatLng(54.581765, -5.937637)).title("Marker")); 



     // Enabling MyLocation Layer of Google Map 
     googleMap.setMyLocationEnabled(true); 

     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, 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; 
     } 
     mMap.setMyLocationEnabled(true); 
     mMap.getUiSettings().setMyLocationButtonEnabled(true); 

    } 

} 
+0

有你在清單中添加的權限。 – DkThakur

+0

你獲得了API密鑰嗎?並在清單中爲FINE&COARSE LOCATION聲明權限? – AwaisMajeed

+0

是的所有權限已被添加到清單,我也有清單中的API和密鑰! –

回答

0
private static final int REQUEST_FINE_LOCATION = 1001; 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    mMap.addMarker(new MarkerOptions().position(new LatLng(54.581765, -5.937637)).title("Marker")); 
    checkLocationPermission(); 
} 

protected void checkLocationPermission() { 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
     || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
    this.googleMap.setMyLocationEnabled(true); 
    } 
    else { 
    requestFineLocationPermission(); 
    } 
} 

protected void requestFineLocationPermission() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) { 
     Toast.makeToast(this, "Provide Location Permission", Toast.LENGTH_LONG).show(); 
    } 
    else { 
     requestPermissions(new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, REQUEST_FINE_LOCATION); 
    } 
    } 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
    case REQUEST_FINE_LOCATION: 
     checkLocationPermission(); 
    } 
} 
+0

試過這個,它不工作,地圖仍然有效,但沒有顯示位置按鈕 –

+0

你可以卸載應用程序並再次安裝嗎? 否則,您需要從設置中爲您的應用程序手動啓用這些權限。 – CodeCameo

0
private GoogleMap.OnMyLocationChangeListener myLocationChangeListener =  new GoogleMap.OnMyLocationChangeListener() { 
@Override 
public void onMyLocationChange(Location location) { 
mLastLocation = location; 
if (mCurrLocationMarker != null) { 
    mCurrLocationMarker.remove(); 
} 

//Place current location marker 
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
MarkerOptions markerOptions = new MarkerOptions(); 
markerOptions.position(latLng); 
markerOptions.title("Current Position"); 
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
mCurrLocationMarker = mGoogleMap.addMarker(markerOptions); 

//move map camera 
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11)); 

//optionally, stop location updates if only current location is needed 
if (mGoogleApiClient != null) { 
    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 

    } 
};