java手机飞行模式_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 publicvoidhandleMessage (Message msg)2 caseEVENT_RADIO_STATE_CHANGED:3 //This will do nothing in the radio not4 //available case5 setPowerStateToDesired();6 pollState();7 break;8 privatevoidsetPowerStateToDesired()9 if(mDesiredPowerState10 &&cm.getRadioState()==CommandsInterface.RadioState.RADIO_OFF11 ) {12 cm.setRadioPower(true,null);13 }elseif(!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 state18 }

3.4 RADIO关掉后(状态变为RADIO_OFF),再向上发一个EVENT_RADIO_STATE_CHANGED通知,参考3.3。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值