我正在开发一个使用地图的应用程序。我希望一旦我打开我的应用程序,它应该会自动放大以在地图上显示我的位置,但目前发生的事情是地图是可见的,但当前位置不会自动显示。它显示在我单击右上角的"我的定位按钮"后。那么如何在我的代码中合并上述功能
在你的项目中创建一个类并复制这段代码
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) {
}
}
然后在 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));