我有一个同时使用ble和wifi的Android应用程序。定期断开锁定,不再检测设备。当找到锁定故障时,我注意到我可以通过关闭飞行/飞行模式来重新建立正常操作。但是如果我打开/关闭蓝牙或打开/关闭wifi,或打开/关闭wifi和蓝牙,我无法通过打开/关闭飞行模式来复制我得到的结果。这告诉我飞行模式正在做一些不同的事情。所以:
飞行模式与打开和关闭蓝牙和/或wifi的单独功能有什么区别?
答案 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(假);
也许它与安静模式有关?这是相当迷人的,我很抱歉,我无法提供更好的答案,但希望如果你想深入挖掘,这是一个很好的起点。