2

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

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

4

1 回答 1

3

我们所知道的

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

我们不知道的

至于为什么它与简单地禁用某些无线电不同,我也遇到过类似的情况,WIFI不再连接并在飞行模式开/关后再次工作。

您可以遵循APM 所做的源代码,但最终它会作为用户广播意图Intent.ACTION_AIRPLANE_MODE_CHANGED,并且此意图由无线电的所有广播接收器单独处理。他们如何处理这与设置中的无线电的简单切换不同,这决定了它是否恢复生机。

深层发掘

例如,在 中BluetoothManagerService,当我们启用飞行模式时,我们会触发2收音机的状态,而不是0禁用它。所以很明显disabled飞机模式 disabled之间有区别,这很有趣。

// 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;

如您所见,在管理器的源代码中,注意到飞行模式会影响启动。所以也许这就是你所追求的。当我们在飞行模式后启用收音机时,运行的代码如下:

sendEnableMsg(mQuietEnableExternal);

然而,简单地启用无线电运行这个:sendEnableMsg(false);

结论

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

于 2016-04-25T22:18:51.227 回答