Check Location Provider Status
我正在制作一个测试项目来学习如何在 Android 中使用 Location。
我想使用 WIFI/3G 作为默认提供程序,但是如果没有工作(例如,飞行模式设置为 ON),我想切换到 GPS。
我的想法是检查 NETWORK_PROVIDER 状态。如果不可用,请检查 GPS_PROVIDER 状态。如果这也不可用,请不要使用位置并显示消息。
为此,我需要检查当前的提供者状态,但我找不到方法。
有什么办法吗?
我曾尝试使用 isProviderEnabled,但该方法只告诉我 Provider 是否可以使用,但如果真的启用则不会。
理想的想法是在调用 requestLocationUpdates
之前这样做
感谢和抱歉我的英语
使用此代码检查
1 2 3 4 5 | 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... } |
编辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | //-------------------------------------------------------- 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() |
可能有一些语法错误,但我认为这个逻辑是你需要的。
我正准备在我的一个应用程序中进行设置,但我还没有尝试过。如果您使用对 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