我希望谷歌地图显示用户的位置。我试过这段代码,但它在 Android 6 上不起作用。
private GoogleMap map;
LocationManager lm;
LocationListener ll;
Location l;
LatLng pos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_layout);
lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
ll = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
l = (Location) location;
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
};
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.nMap);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
map = googleMap;
if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
lm.requestLocationUpdates(lm.NETWORK_PROVIDER, 0, 0, ll);
}
pos = new LatLng(l.getLatitude(), l.getLongitude());
// Add a marker in Sydney and move the camera
map.setMyLocationEnabled(true);
map.addMarker(new MarkerOptions().position(pos).title("Marker in Sydney"));
map.moveCamera(CameraUpdateFactory.newLatLng(pos));
}
这是我设置的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
原文由 Z4F1 发布,翻译遵循 CC BY-SA 4.0 许可协议
将 FusedLocationProviderClient 与 Google Play Services 11 及更高版本一起使用:
请参见此处: 如何使用 FusedLocationProviderClient 在 GoogleMap 中获取当前位置
对于使用(现已弃用)FusedLocationProviderApi:
如果您的项目使用 Google Play Services 10 或更低版本,则使用 FusedLocationProviderApi 是最佳选择。
与旧的开源 LocationManager API 相比, FusedLocationProviderApi 提供的电池消耗更少。此外,如果您已经在使用 Google Play Services for Google Maps,那么没有理由不使用它。
这是一个完整的 Activity 类,它在当前位置放置一个标记,并将相机移动到当前位置。
它还在运行时检查 Android 6 及更高版本(Marshmallow、Nougat、Oreo)的位置权限。为了正确处理 Android M/Android 6 及更高版本所需的位置权限运行时检查,您需要确保用户在调用
mGoogleMap.setMyLocationEnabled(true)
之前以及在请求位置之前已授予您的应用程序位置权限更新。活动主.xml:
结果:
如果需要,使用 AlertDialog 显示权限说明(如果用户拒绝权限请求,或授予权限,然后在设置中撤销它,则会发生这种情况):
通过调用
ActivityCompat.requestPermissions()
提示用户获取位置权限:授予位置权限后,将相机移动到当前位置并放置标记: