检查位置提供商状态

时间:2014-05-06 13:49:09

标签: android geolocation android-location

我正在制作一个测试项目,以了解如何在Android中使用该位置。

我想使用WIFI / 3G作为默认提供商,但如果没有工作(例如飞行模式设置为ON),我想切换到GPS。

我的想法是检查NETWORK_PROVIDER状态。如果不可用,请检查GPS_PROVIDER状态。如果这也不可用,请不要使用位置并显示消息。

要做到这一点,我需要检查当前的提供商状态,但我找不到方法。 有办法吗?

我尝试使用isProviderEnabled,但该方法只告诉我是否可以使用或不能使用提供商,但如果真的启用了则不会。

理想的想法是在调用requestLocationUpdates

之前执行此操作

谢谢,对不起我的英文

2 个答案:

答案 0 :(得分:0)

使用此代码检查

 LocationManager mlocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!mlocMan .isProviderEnabled(LocationManager.GPS_PROVIDER) && !mlocMan .isProviderEnabled(LocationManager.NETWORK_PROVIDER)){

//both providers are disabled, show a message...
}

编辑:

//--------------------------------------------------------
private static boolean isAirplaneModeOn(Context context) {

   return Settings.System.getInt(context.getContentResolver(),
           Settings.System.AIRPLANE_MODE_ON, 0) != 0;

}

public void onCreate(){
// .. some code

LocationManager mlocMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

if(!isAirplaneModeOn(this)){//airplan is OFF, check Providers

if(mlocMan.isProviderEnabled(LocationManager.NETWORK_PROVIDER){
//start listener to requestUpdates ...
}else{
//NETWORK_PROVIDER disabled, try GPS
if(mlocMan .isProviderEnabled(LocationManager.GPS_PROVIDER)){
//start listener to requestUpdates ...
}else{
//show message, no providers enabled.
}

}//network disabled

}else{//airplan mode is ON
//here you need to check GPS only, as netwrok is OFF for sure
if(mlocMan .isProviderEnabled(LocationManager.GPS_PROVIDER)){
//start listener to requestUpdates ...
}else{
//show message, no providers enabled.
}

}//airplan is ON

}//onCreate()

可能有一些语法错误,但我认为这个逻辑是你需要的。

答案 1 :(得分:0)

我已经准备好在我的一个应用程序中进行此设置,但是我还没有尝试过。如果您使用对LocationManager :: requestLocationUpdates()的调用来注册LocationListener,则框架应调用您的LocationListener的onStatusChanged(字符串提供程序,整数状态,附加捆绑包)并提供状态。该状态应该为AVAILABLE,OUT_OF_SERVICE或TEMPORARILY_UNAVAILABLE。

从理论上讲,当用户切换到飞行模式时,应该收到状态为OUT_OF_SERVICE或TEMPORARILY_UNAVAILABLE的onStatusChanged的调用。然后,您可以切换到使用其他提供程序。关闭“飞行模式”后,您应该会再次收到状态为AVAILABLE的呼叫,并且可以恢复使用以前的提供者。

位置侦听器参考: https://developer.android.com/reference/android/location/LocationListener