2

我需要定期跟踪用户的位置。

为此,我在我的服务的 onCreate 方法中调用 requestLocationUpdates()。

@Override
public void onCreate()
{
LocationManager aLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

aLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, new LocationListener(LocationManager.GPS_PROVIDER));
}

通常我会通过这个 GPS_PROVIDER 定期获取位置更新。但是,在某些区域,我无法正确获取位置更新。在这种情况下,我喜欢将我的 requestLocationUpdates 调用切换为使用 NETWORK_PROVIDER。

因此,当我无法从 GPS_PROVIDER 获取正确的位置更新时,我可以切换我的 requestLocationUpdates 以使用 NETWORK_PROVIDER。

我怎样才能做到这一点?检查某种条件并在 onStatusChanged() 中更改我的 requestLocationUpdates() 是否正确。

请提出建议。

谢谢你。

4

2 回答 2

2

是的 有办法做到这一点。您可以检查 GPS 提供商是否可用,locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) 如果为 false,则使用网络提供商

您还可以覆盖 onProviderEnabled() 和 onProviderDisabled() 以从 GPS 切换到网络平均值,而如果您喜欢使用库,则可以使用此位置跟踪库 https://github.com/nagendraksrivastava/Android-Location-Tracking-Library 它漂亮的图书馆和完美的工作

这是获取所有提供者列表并在此基础上获取数据的代码,因此在这种情况下,您应该担心提供者

LocationManager mLocationManager = new LocationManager()
List<String> matchingProviders = mLocationManager.getProviders(true);
for(String provider : matchingProviders ){
Location location = mLocationManager.getLastKnownLocation(provider);
if(location != null){
double lat = location.getLatitude();
}
于 2013-03-25T13:01:22.763 回答
1

试试这个代码它对我有用......

void currentlocation(){
    LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            // Called when a new location is found by the network location provider.
            MyContants.lat = location.getLatitude();
            MyContants.lon = location.getLongitude();
            //  Log.w(MyContants.ScanResult_TAG, "Currnet Location==="+String.valueOf(lat)+"-----"+String.valueOf(lon));
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {}
        public void onProviderDisabled(String provider) {}

    };


    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    //GPS location updates.
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}

使用权限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
于 2013-03-25T13:00:19.553 回答