繁体   English   中英

如何知道飞行模式在 BroadcastReceiver 中是打开还是关闭?

[英]How to know if Airplane Mode is TURNED ON or TURNED OFF in BroadcastReceiver?

我在使用此解决方案的其他问题中看到了多个答案,以了解飞行模式是否已更改:

IntentFilter intentFilter = new      
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");

BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Log.d("AirplaneMode", "Service state changed");
      }
};

context.registerReceiver(receiver, intentFilter);

但现在我想知道飞行模式是在 onReceive 方法上打开还是关闭。

谢谢你。

该答案所述 ,您可以通过以下方式检查飞行模式状态:

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean isAirplaneModeOn(Context context) {        
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return Settings.System.getInt(context.getContentResolver(), 
                Settings.System.AIRPLANE_MODE_ON, 0) != 0;          
    } else {
        return Settings.Global.getInt(context.getContentResolver(), 
                Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    }       
}

如果返回的结果为true ,那么飞行模式为ON ,反之亦然,因此您的完整答案将是:

IntentFilter intentFilter = new      
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");

BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Log.d("AirplaneMode", "Service state changed");
            boolean airplane_active = isAirplaneModeOn(context);
      }
};

context.registerReceiver(receiver, intentFilter);

尝试这个。

IntentFilter intentFilter = new      
IntentFilter("android.intent.action.AIRPLANE_MODE_CHANGED");

BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Log.d("AirplaneMode", "Service state changed");
            boolean isAirplaneMode = isAirplaneModeOn(context);
      }
};

context.registerReceiver(receiver, intentFilter);

private static boolean isAirplaneModeOn(Context context) {

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

}

注意

在Jelly Bean 4.2中,此设置已移至Settings.Global

试试这个代码。

@Override
public void onReceive(Context context, Intent intent) {

boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
if(isAirplaneModeOn){

   // AP mode is on
} else {
   // AP mode is off
  }
}

通过使用 ContentObserver 我们也可以得到

private class SetupContentObserver extends ContentObserver {

private final Uri mDeviceProvisioned = Settings.Global.getUriFor(
        Settings.Global.AIRPLANE_MODE_ON);

public SetupContentObserver(Handler handler) {
    super(handler);
}

void register() {
    getContentResolver().registerContentObserver(mDeviceProvisioned, false, this, UserHandle.USER_ALL);
}

@Override
public void onChange(boolean selfChange, Uri uri, int userId) {
    // do actula logic
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM