Airplane Mode 開啟就會斷掉所有通訊 (BT、WiFi、3G)。在 Android 上,這個功能要能夠正常運作,必須有 3G module。過程如下:
- packages/apps/Settings/src/com/android/settings/AirplaneModeEnabler.java
- onPreferenceChange 呼叫 setAirplaneModeOnsetAirplaneModeOn
- Disable UI
- Set Settings.System.AIRPLANE_MODE_ON to 0 or 1
- Broadcast ACTION_AIRPLANE_MODE_CHANGED intent
- 收到 EVENT_SERVICE_STATE_CHANGED 事件時,呼叫 onAirplaneModeChanged
- 檢查 serviceState.getState() == ServiceState.STATE_POWER_OFF
- 更新 UI 上面的 checkbox
- Enable UI
當開啟 airplane mode,狀態不等於 STATE_POWER_OFF,導致 UI 上面的 checkbox 會勾不起來。所以在 onAirPlaneModeChanged,改成判斷 Settings.System.AIRPLANE_MODE_ON
boolean airplaneModeEnabled;
if (Settings.System.getInt(mContext.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0)==1)
{
airplaneModeEnabled = true;
} else {
airplaneModeEnabled = false;
}
參考資料
沒有留言:
張貼留言