关于android:检查位置提供者状态

Check Location Provider Status

我正在制作一个测试项目来学习如何在 Android 中使用 Location。

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

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

为此,我需要检查当前的提供者状态,但我找不到方法。
有什么办法吗?

我曾尝试使用 isProviderEnabled,但该方法只告诉我 Provider 是否可以使用,但如果真的启用则不会。

理想的想法是在调用 requestLocationUpdates

之前这样做

感谢和抱歉我的英语


使用此代码检查

 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()

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

相关讨论

  • 那不符合我的要求。 isProviderEnabled 仅告诉您用户是否允许您使用 GPS_PROVIDER 或 NETWORK_PROVIDER。它不会告诉您 GPS 是否打开或关闭,或者手机是否处于飞行模式
  • 我看不出这不是你想要的!我的想法是检查 NETWORK_PROVIDER 状态。如果不可用,请检查 GPS_PROVIDER 状态。如果这也不可用,请不要使用位置并显示消息。这就是我给你的。
  • 告诉您用户是否让您使用 GPS_PROVIDER ,taht 表示其已启用。
  • 试试这个,把手机调成飞行模式,然后调用 locationManager.isProviderEnabled(LocationManager.NETWORK_PR??OVIDER)。它会返回你真实的。对我来说,那是错误的。
  • 好吧,现在我找到你了,检查一下,加上上面的代码,你将得到你需要的东西 stackoverflow.com/questions/4319212/...
  • 我只是重新检查 locationManager.isProviderEnabled(LocationManager.GPS_PROVID??ER) 如果 GPS 已关闭,则返回 false。所以可能是 NETWORK_PROVIDER 的问题。我迷路了!
  • 我觉得它有点棘手,我会发布你完整的代码,可能会帮助你
  • 第一部分解决了我的位置问题(Android P)

我正准备在我的一个应用程序中进行设置,但我还没有尝试过。如果您使用对 LocationManager::requestLocationUpdates() 的调用注册 LocationListener,则框架应调用 LocationListener 的 onStatusChanged(String provider, int status, Bundle extras) 并提供状态。状态应该是 AVAILABLE、OUT_OF_SERVICE 或 TEMPORARILY_UNAVAILABLE。

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

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


以上是关于android:检查位置提供者状态的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>