Android 1.5: 飞行模式分析
作者:徐建祥(netpirate@gmail.com)
日期:2009/11/05
网址:http://www.anymobile.org



1.1 通过com.android.settings.WirelessSettings打开飞行模式;

1.1.1 设置飞行模式值;
Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, enabling ? 1 : 0);

1.1.2 发出Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)。
AirplaneModeEnabler.setAirplaneModeOn(boolean enabling)

1.2 关闭相关的服务连接

1.2.1 关闭WIFI;
frameworks/base/services/java/com/android/server/WifiService.BroadcastReceiver.onReceive(...)

1.2.2 关闭Bluetooth;
frameworks/base/core/java/android/server/BluetoothDeviceService.BroadcastReceiver.onReceive(...)

1.2.3 关闭RADIO。
PhoneApp.PhoneAppBroadcastReceiver.onReceive(...) -> GSMPhone.setRadioPower(false)->ServiceStateTracker.setRadioPower(false)->ServiceStateTracker.setPowerStateToDesired()->RIL.setRadioPower(true, null)

2/ 取消飞行模式

与打开飞行模式流程类似,false改为true,略。

3/ 飞行模式启动流程

在SIM_READY后,ServiceStateTracker收到RADIO_STATE_CHANGED通知后,关闭RADIO;WIFI和蓝牙部分,则会在对应的服务程序中判断飞行模式设置,如果是飞行模式,则不可用。

下面是RADIO OFF流程:

3.1 正常开机,在RADIO STATE切换到SIM_READY状态后,向上发出EVENT_RADIO_STATE_CHANGED通知;
RADIO.STATE = RADIO_STATE_UNAVAILABLE->RADIO_STATE_OFF->SIM_NOT_READY->SIM_READY
(hardware/ril/reference-ril/reference-ril.c)

3.2 ServiceStateTracker.java初始化,设置mDesiredPowerState = ! (airplaneMode > 0),并调用RIL接口注册EVENT_RADIO_STATE_CHANGED;
frameworks/base/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java

3.3 ServiceStateTracker.java处理RADIO STATE的变化,如果不是飞行模式,设置RADIO状态为ON;如果是飞行模式,且开机状态,则关掉RADIO;
1 public void handleMessage (Message msg)
2 case EVENT_RADIO_STATE_CHANGED:
3 // This will do nothing in the radio not
4 // available case
5 setPowerStateToDesired();
6 pollState();
7 break;
8 private void setPowerStateToDesired()
9 if (mDesiredPowerState
10 && cm.getRadioState() == CommandsInterface.RadioState.RADIO_OFF
11 ) {
12 cm.setRadioPower(true, null);
13 } else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
14 dcTracker.cleanConnectionBeforeRadioOff();
15 // If it's on and available and we want it off..
16 cm.setRadioPower(false, null);
17 } // Otherwise, we're in the desired state
18 }

更多相关文章

  1. android 设计模式相关内容
  2. Android获取通话状态
  3. android 加载模式
  4. Android/Bluetooth 初始化流程
  5. Android 4G驱动移植流程
  6. Android USB状态监控(解决scheme="file")
  7. Android仿人人客户端(v5.7.1)——主流程(活动)图
  8. Android activity启动模式理解
  9. Android 音视频开发(五) : OpenGL ES API,了解 OpenGL 开发的基本

随机推荐

  1. 【Android 开发】: Android客户端与服务
  2. 一起Talk Android吧(第二百六十六回:Androi
  3. 【Android】最新主流新闻app功能实现。仿
  4. Android百度地图——在地图上标注已知GPS
  5. Android图像识别扫名片识别技术SDK
  6. android强制修改话机语言
  7. 【Android 电量优化】电量优化 ( 耗电量
  8. 从多方面理解Android体系结构
  9. Android OpenGLES2.0(八)——纹理贴图之显
  10. 【Android 设计】:样式_ 设备与显示 | 主