这是从 GPS 和网络(Wi-Fi/数据)提供商启动定位服务的方法。
LocationManager locationManager = (LocationManager)getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
如果您想停止侦听位置更新,请运行以下代码:
locationManager.removeUpdates(locationListener);
无论提供者(GPS/网络)如何,单行代码都会停止侦听任何位置更新,因为 LocationManager 不关心更新来自何处。
在您的情况下,我假设您知道如何创建一些 UI 来让用户决定是否使用 GPS/网络。然后,您可以执行以下操作:
if ( useGPS ) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
}
if ( useNetwork ) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
}
如果用户同时启用这两个提供商,则位置更新可能会更准确。如果用户禁用了这两个提供程序,也没关系。由于 LocationListener 不会有任何更新,它应该是用户想要的。
顺便说一下,这是创建 LocationListener 的代码:
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// you may add some logic here to determine whether the new location update is more accurate than the previous one
if ( isBetterLocation(location,currentBestLocation) ) {
currentBestLocation = location;
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};