Switching between gps and network provider according to the availability(根据可用性在 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 和网络提供商之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:根据可用性在 gps 和网络提供商之间切换
基础教程推荐
- 在 appComponent dagger 2 中动态添加测试模块? 2022-01-01
- 新的@SystemApi 注解是什么意思,和@hide 有什么区别 2022-01-01
- 在 iOS8 中无法获得正确的键盘高度值 2022-01-01
- - (CGRect)convertRect:(CGRect)rect toView:(UIView *)view 如何工作 2022-01-01
- 在 Android 模拟器中激活网络位置提供程序? 2022-01-01
- Android:STATE_SELECTED不工作 2022-01-01
- 我的 UIImageView 的任务 2022-01-01
- 如何将多个组件添加到 PickerView? 2022-01-01
- 突出显示朗读文本(在 iPhone 的故事书类型应用程序中) 2022-01-01
- 可可/目标C(OSX不是iOS)从子对象访问父对象 2022-01-01
