[英]Android Google Maps API Location
我已经在Google上搜索了一下,但仍然找不到确切的答案。
目前在Android中使用Google Maps的“最佳”或“推荐”方式是什么?
我希望我的应用程序使用自动跟踪用户位置的蓝点,就像单击“我的位置”按钮时的“地图”应用程序一样。 其中一些功能似乎只是通过使用地图内置的,但是,我不确定如何从中提取位置,因为我已经阅读过.getMyLocation()?
做这个的最好方式是什么?
我正在使用此代码:
//get locationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location myLocation = locationManager.getLastKnownLocation(provider);
map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
double latitude = myLocation.getLatitude();
double longitude = myLocation.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
通过启用“我的位置”图层,可以用蓝点显示用户的当前位置。 只需调用以下方法,就会在地图上显示显示用户当前位置的蓝点:
mMap.setMyLocationEnabled(true);
为了让您应该设置一个位置更新LocationListener
使用LocationClient
。 在实现LocationListener
接口时,您将覆盖onLocationChanged
方法,该方法将为您提供位置更新。 当您使用LocationClient
请求位置更新时,您将创建一个LocationRequest
以指定您希望位置更新的频率。
您必须使用位置监听器。 它将解决您想要的所有问题。 使用此代码。 我试图用评论解释所有事情。
import android.location.Location;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
public class YourActivity extends FragmentActivity implements
LocationListener, ConnectionCallbacks, OnConnectionFailedListener{
private GoogleMap mMap;
private LocationClient mLocationClient;
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(1000) // 1 second - interval between requests
.setFastestInterval(16) // 60fps
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_map);
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
setUpLocationClientIfNeeded();
//.. and connect to client
mLocationClient.connect();
}
@Override
public void onPause() {
super.onPause();
// if you was connected to client you have to disconnect
if (mLocationClient != null) {
mLocationClient.disconnect();
}
}
private void setUpMapIfNeeded() {
// if map did not install yet
if (mMap == null) {
// install it from fragment
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// if installation success
if (mMap != null) {
// init all settings of map
init();
}
}
}
//if client was not created - create it
private void setUpLocationClientIfNeeded() {
if (mLocationClient == null) {
mLocationClient = new LocationClient(
getApplicationContext(),
this,
this);
}
}
private void init() {
// settings of your map
mMap.setBuildingsEnabled(true);
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setCompassEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
}
// when you get your current location - set it on center of screen
@Override
public void onLocationChanged(Location location) {
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(location.getLatitude(), location.getLongitude())).zoom(9).bearing(0).tilt(0).build();
CameraUpdate cameraUpdate = CameraUpdateFactory
.newCameraPosition(cameraPosition);
mMap.animateCamera(cameraUpdate);
//Be careful, if want to show current location only once(after starting map) use this line
//but you don't need it in your task!
mLocationClient.removeLocationUpdates(this);
}
// after connection to client we will get new location from LocationListener
//with settings of LocationRequest
@Override
public void onConnected(Bundle arg0) {
mLocationClient.requestLocationUpdates(
REQUEST, //settings for this request described in "LocationRequest REQUEST" at the beginning
this);
}
@Override
public void onDisconnected() {
}
@Override
public void onConnectionFailed(ConnectionResult arg0) {
}
}
我最近两天一直在寻找它。
回答您的问题:
目前在Android中使用Google Maps的“最佳”或“推荐”方式是什么?
今天,您有2个选择:
据我所知,两种方法都可以正常工作,但是如果您问我将使用哪一种,我会选择一种Google推荐的方法:#1。
他们是这样说的:
作为Google Play服务的一部分的Google Location Services API提供了更强大的高级框架,该框架可自动处理位置提供者,用户移动和位置准确性。 它还根据您提供的功耗参数处理位置更新计划。 在大多数情况下,通过使用Location Services API,您将获得更好的电池性能以及更合适的精度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.