根据可用性在 gps 和网络提供商之间切换

时间:2023-03-21
本文介绍了根据可用性在 gps 和网络提供商之间切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

public void onCreate() {
 locationListener = new GeoUpdateHandler();
 locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

try {
   gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
   network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) { 
}

if(gps_enabled) {
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 100, locationListener);
} else if(network_enabled) { // Checking for GSM
   locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, DISTANCE, locationListener);
}   
}   
public class GeoUpdateHandler implements LocationListener {
private void getPresentLocation(Location location) {
    ... 
            //Fetch the locations
            ...
}

@Override
public void onProviderDisabled(String provider) { }

@Override
public void onProviderEnabled(String provider) { }

@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }

@Override
public void onLocationChanged(Location location) {
    getPresentLocation(location);
}
}

这是我的代码片段,我的问题是,一旦在 GPS 开启的情况下安装了应用程序,那么一旦我们关闭 GPS,它就不会切换到 GSM 来获取位置,反之亦然.

this is my code snippet and my issue is that once the application is installed with GPS Switched ON, then it is not switching to GSM to fetch location once we OFF GPS, and vice versa.

所以请告诉我一种根据位置提供商的可用性在 GPS 和 GSM 之间有效切换的方法.

So please tell me a way to switch efficiently between GPS and GSM according to the availability of the location provider.

注意:我的应用是一项服务.

NOTE: My app is a service.

谢谢.

我有一个广播接收器,这就是为什么我假设一旦 GPS 开/关发生就会调用 onCreate().

I got a BroadcastReceiver, thats why i assume the onCreate() will be invoked once the GPS ON/OFF happen.

我还尝试在 onLocationChanged(Location location) 中检查提供程序的可用性.但它没有帮助.

I also tried checking the provider availability in onLocationChanged(Location location). But it didnt helped.

我修改了我的 onProviderDisabled &onProviderEnabled 像这样,请告诉我在这里做错了什么..

I modified my onProviderDisabled & onProviderEnabled like this, Please tell what i am doing wrong here..

    public void onProviderDisabled(String provider) {
        locationManager.removeUpdates(locationListener);
        if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);               
        } else {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
        }   
    }

    @Override
    public void onProviderEnabled(String provider) {
        locationManager.removeUpdates(locationListener);
        if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
        } else {
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);
        }

    }

推荐答案

得到了解决方案:

 public void onProviderDisabled(String provider) {
   locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
   if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,  locationListener);
   } else {
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
   } 
}

@Override
public void onProviderEnabled(String provider) {
  locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);   
  if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
  } else {
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
  }
}

我错过的是locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);在 onProviderEnabled() 和 onProviderDisabled() 中.

what i missed is locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); in onProviderEnabled() and onProviderDisabled().

谢谢

这篇关于根据可用性在 gps 和网络提供商之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:IOS:将图像添加到自定义 MKAnnotationview 下一篇:Android中如何知道定位模式是WIFI还是2G/3G基站?

相关文章