Android: 飞行模式是完全关闭无线电还是只关闭传输部分?
Android: does flight mode turn off radio completely or just transmission portion?
我有一个同时使用 ble 和 wifi 的 Android 应用程序。定期 ble 锁定并且不再检测设备。在查找锁定故障时,我注意到我可以通过关闭 flight/airplane 模式来重新建立正常操作。但是,如果我打开蓝牙 on/off 或 wifi on/off,或者同时打开 wifi 和蓝牙 on/off,我无法复制通过打开飞行模式 on/off 获得的结果。这告诉我飞行模式正在做一些不同的事情。所以:
飞行模式和单独打开和关闭蓝牙and/or wifi 的功能有什么区别?
我们所知道的
飞行模式会禁用所有无线电、蜂窝、蓝牙、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
。所以很明显disabled和airplane mode 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(假);
结论
可能和安静模式有关?这很吸引人,很抱歉我无法提供更好的答案,但如果您想更深入地挖掘,希望这是一个很好的起点。
我有一个同时使用 ble 和 wifi 的 Android 应用程序。定期 ble 锁定并且不再检测设备。在查找锁定故障时,我注意到我可以通过关闭 flight/airplane 模式来重新建立正常操作。但是,如果我打开蓝牙 on/off 或 wifi on/off,或者同时打开 wifi 和蓝牙 on/off,我无法复制通过打开飞行模式 on/off 获得的结果。这告诉我飞行模式正在做一些不同的事情。所以:
飞行模式和单独打开和关闭蓝牙and/or wifi 的功能有什么区别?
我们所知道的
飞行模式会禁用所有无线电、蜂窝、蓝牙、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
。所以很明显disabled和airplane mode 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(假);
结论
可能和安静模式有关?这很吸引人,很抱歉我无法提供更好的答案,但如果您想更深入地挖掘,希望这是一个很好的起点。