在android中更改我的位置提供程序,当GPS提供程序没有正确的位置更新时

在android中更改我的位置提供程序,当GPS提供程序没有正确的位置更新时,android,location,Android,Location,我需要定期跟踪用户的位置 为此,我在服务的onCreate方法中调用requestLocationUpdates() @Override public void onCreate() { LocationManager aLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); aLocationManager.requestLocationUp

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

为此,我在服务的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_提供商获得位置更新。然而,在某些地区,我无法正确地获得位置更新。在这种情况下,我喜欢切换我的requestLocationUpdates调用以使用网络\u提供程序

因此,当我无法从GPS_提供商处获得正确的位置更新时,我可以将我的RequestLocationUpdate切换到使用网络_提供商

我该怎么做?检查某种条件并在onStatusChanged()中更改我的requestLocationUpdates()是否正确

请给我一些建议


谢谢。

试试这段代码,它对我有用

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" />

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

您还可以覆盖onProviderEnabled()和onProviderDisabled()以从GPS切换到网络 同时,如果您喜欢使用库,则可以使用此位置跟踪库 这是一个很好的图书馆,工作非常好

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

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();
}
LocationManager MLLocationManager=new LocationManager()
List matchingProviders=mLocationManager.getProviders(true);
用于(字符串提供程序:匹配提供程序){
Location Location=mlLocationManager.getLastKnownLocation(提供者);
如果(位置!=null){
双纬度=location.getLatitude();
}

此外,selva建议我调用requestLocationUpdates()同时使用网络提供商和GPS提供商?正确吗?我们可以同时进行两次requestLocationUpdates初始化。如果是这样的话,在某些情况下,我可以使用GPS提供商和网络提供商获取位置。你可以这样做,但这将是一个坏主意,会耗尽电池,因此我不建议使用f或者它..您可以使用get all provider,然后从我编辑答案的提供程序中选择数据。只需签出代码即可同时进行2次requestLocationUpdates初始化。如果是这样,在某些情况下,我可以使用GPS_提供程序和网络_提供程序获取位置更新。在这种情况下,我可能会收到2个打开的呼叫LocationChanged()方法(可能是错误的,如果我是正确的话)。onLocationChanged()方法只调用了位置更新(新位置已建立)所以onLocation Change方法只调用一次…在新位置已建立的地方…我使用此方法,我没有收到两次调用…因此我将其放入