我正在开发一个我正在使用地图的应用程序。我想要一旦我打开我的应用程序它应该自动放大以显示我在地图上的位置,但目前发生的是地图是可见的但当前位置不会自动显示。点击右上方的MyLocationButton后显示。那么如何在我的代码中加入上述功能
答案 0 :(得分:1)
在项目中创建一个类并复制此代码
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
public class AppLocationService extends Service implements LocationListener {
protected LocationManager locationManager;
Location location;
private static final long min_distance_forupdate = 10;
private static final long min_time_to_update = 2 * 60 * 1000;
public AppLocationService(Context context) {
locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
}
public Location getLocation(String provider) {
if (locationManager.isProviderEnabled(provider)) {
try {
locationManager.requestLocationUpdates(provider, min_time_to_update, min_distance_forupdate, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(provider);
return location;
}
}catch (SecurityException r){
Log.d("loc",r.getMessage());
}
return location;
}
return location;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
然后在你的map活动中onMapReady函数使用这段代码
mMap = googleMap;
appLocationService = new AppLocationService(MapsActivity.this);
Location newlocation = appLocationService.getLocation(LocationManager.NETWORK_PROVIDER);
if (newlocation != null) {
double curlat = newlocation.getLatitude();
double curlog = newlocation.getLongitude();
Log.d("latitude", curlat + " ----" + curlog);
LatLng sydney = new LatLng(curlat, curlog);
mMap.addMarker(new MarkerOptions().position(sydney).title("Your location"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
LatLng coordinate = new LatLng(curlat, curlog);
CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 5);
mMap.animateCamera(yourLocation);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(curlat, curlog)) // Sets the center of the map to location user
.zoom(17) // Sets the zoom
.bearing(90) // Sets the orientation of the camera to east
.tilt(40) // Sets the tilt of the camera to 30 degrees
.build(); // Creates a CameraPosition from the builder
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));