Android:飞行模式是完全关闭无线电还是只关闭传输部分?

时间:2016-04-11 18:16:21

标签: android bluetooth airplane

我有一个同时使用ble和wifi的Android应用程序。定期断开锁定,不再检测设备。当找到锁定故障时,我注意到我可以通过关闭飞行/飞行模式来重新建立正常操作。但是如果我打开/关闭蓝牙或打开/关闭wifi,或打开/关闭wifi和蓝牙,我无法通过打开/关闭飞行模式来复制我得到的结果。这告诉我飞行模式正在做一些不同的事情。所以:

飞行模式与打开和关闭蓝牙和/或wifi的单独功能有什么区别?

1 个答案:

答案 0 :(得分:2)

我们所知道的

飞行模式禁用所有无线电,蜂窝,蓝牙,GPS,NFC,wimax以及Settings.Global.AIRPLANE_MODE_RADIOS中声明的任何其他无线电,您可以通过执行adb shell settings get global airplane_mode_radios来检查特定设备中的列表。

我们不知道

至于为什么它与单独禁用某些无线电本身不同,我也经历过与WIFI类似的东西,不再连接并在飞机模式的 ON / OFF 之后再次工作。

您可以关注source code of what APM does,但最后它会以用户Intent.ACTION_AIRPLANE_MODE_CHANGED的形式广播,并且此意图由无线电的所有广播接收器单独处理。 他们如何处理与设置中无线电的简单切换不同,这使得它与生命之间的区别有所不同。

深入挖掘

例如,在BluetoothManagerService中,当我们启用飞行模式时,我们会触发广播的状态2,而不是将被禁用的0。因此,禁用禁用飞机模式之间明显区别,这很有意思。

// Bluetooth persisted setting is off
private static final int BLUETOOTH_OFF=0;
// Bluetooth persisted setting is on
// and Airplane mode won't affect Bluetooth state at start up
private static final int BLUETOOTH_ON_BLUETOOTH=1;
// Bluetooth persisted setting is on
// but Airplane mode will affect Bluetooth state at start up
// and Airplane mode will have higher priority.
private static final int BLUETOOTH_ON_AIRPLANE=2;

正如您所看到的,在Manager的源代码中,注意到飞行模式将影响启动。所以也许这就是你所追求的。当我们在飞机模式之后启用无线电时,这是运行的代码:

sendEnableMsg(mQuietEnableExternal);

然而,只需启用无线电就可以运行这个:     sendEnableMsg(假);

Conclussion

也许它与安静模式有关?这是相当迷人的,我很抱歉,我无法提供更好的答案,但希望如果你想深入挖掘,这是一个很好的起点。