Android(安卓)1.5: 飞行模式分析
作者:徐建祥(netpirate@gmail.com)
日期:2009/11/05
网址:http://www.anymobile.org
飞行模式:关掉网络、蓝牙和WIFI等外部连接;可以使用手机的其它功能。
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;
2 case EVENT_RADIO_STATE_CHANGED:
3 // Thiswilldonothingintheradionot
4 // availablecase
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 // Ifit'sonandavailableandwewantitoff..
16 cm.setRadioPower( false , null );
17 } // Otherwise,we'reinthedesiredstate
18 }
3.4 RADIO关掉后(状态变为RADIO_OFF),再向上发一个EVENT_RADIO_STATE_CHANGED通知,参考3.3。
更多相关文章
- No.11 使用firewall配置的防火墙策略的生效模式
- android 将一些信息保存到本地,以后更新版本或者替换之后,数据在新
- Android开发之Android的核心服务
- Android蓝牙系统分析
- android系统中使用TelephonyManager类来获取imei号和其他手机信
- [Android(安卓)Samples视频系列之ApiDemos] App-Activity-SaveRe
- Android两行代码修改给系统状态栏设置透明效果
- 重识Activity——生命周期详解
- Android系统级开发,apktool无法反编译