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 }
分享到:
相关推荐
Android1.5 java 源码 欢迎大家下载
低版本 Android1.5 SDK 离线包,低到没朋友,适合考古的朋友。其他版本可能更新了。主要解决无法下载Android SDK的痛点。sdk路径选这个文件。 简单教程。 这是Android开发所需的sdk,下载并解压后,将解压出的整个...
Android Studio安装 java环境变量配置 amd处理器 AS虚拟机 安卓虚拟机显示不全问题解决】 adb不到设备的解决办法
android1.5 API,下载解压缩直接放入android-sdks\platforms下,可直接使用
android 源码 1.5 版本,有想了解内核的朋友可以下载下。
最新Android 1.5SDK 中文版 下载
android 1.5 源码, 可以更方便的调试程序!
android-studio sdk 模拟 Android 1.5 到 2.3.1 的任一版本.part11.rar
android-studio sdk 模拟 Android 1.5 到 2.3.1 的任一版本.part08.rar
android sdk1.5 原代码 覆盖了android.jar(1.5) 包中绝大多数的类(超过90%),没有包括的类有android.R和android.Manifest类,部分第三方库.用时陆续添加. 使用方法: 1,将压缩包解压后,将包内的sources文件夹放置在...
android 1.5 source 源码,用7zip解压。 解压为 android-sdk-windows\platforms\android-3\sources\ 可解决 eclipse 调试时 android 项目时报“Source not found”问题。也方便查看 android 源代码。
Android1.5 sdk里附带的所有1.5版本的api源码
Android1.5 NDK Release 1中文文档
android1.5基础学习代码 光盘内容
Android AirPlus飞行模式自动切换工具,可以根据设定的时间自动进入和退出飞行模式,在无需关机的情况下让手机更加省电,减少睡眠时间手机的辐射作用。 Android飞行模式自动切换工具实现的功能如下: 1.快速进入...
android4.2以上系统飞行模式开启、关闭以及监听,包括WiFi的开关以及监听
android可在飞行模式下使用wifi
Android定时进入飞行模式.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android定时进入飞行模式.zip
HTML 解析工具 HtmlSpanner使用jar包,可以提供TextVIew 加载HTML样式显示