当前位置:首页 > 奇闻趣事

airplane Android 当点击飞行模式都发生了什么?

今天中午午休的时候,我把手机调成了飞行模式。看得出WiFi,蜂窝数据,蓝牙都关了。我想,这个时候还能收到短信吗?出于好奇,我们不妨研究一下源代码,看看在点击飞行模式下会发生什么。

基于Android 9.0的源代码分析。

飞机模式平铺#手柄单击

设置飞行模式入口,下拉状态栏,点击飞行模式图标。从这里,其他入口的逻辑也差不多。源代码位于aosp/framework/base/packages/systemui/src/com/Android/systemui/QS/tiles/AirPlane modetile . Java直接观看其点击事件。

public class airplane modetileextendqstileimpl & lt;BooleanState & gt{

//省略其他代码

@覆盖

publicvoidhandleClick单击{

booleanaaplanemodenabled = mstate . value;

metriccslogger . action(mccontext,getMetricsCategory,!airlanmodeenabled);

if(!airplaneModeEnabled & amp& ampBoolean.parseBoolean(

system properties . get(TelephonyProperties。PROPERTY_INECM_MODE))) {

dependency . get(ActivityStarter . class)。post startactivitydismissingkeyguard(

新意图(电话会议帐篷。ACTION _ SHOW _ NOTICE _ ECM _ BLOCK _ OTHERS),0);

返回;

}

setEnabled(!airlanmodeenabled);

}

private void setenabled(booleaenabled){

finalConnectivityManager mgr =

(ConnectivityManager)McContext . GetSystemServiCe(上下文。CONNECTIVITY _ SERVICE);

mgr.setAirplaneMode(已启用);

}

//省略其他代码

}

然后调用connectivitymanager # setairplane mode方法。

ConnectivityManager #设置飞机模式

AOSP/框架/基础/核心/Java/Android/net/connectivitymanager . Java

@ required session(any of = {

安卓。manifest . permission . Network _ SETTINGS,

安卓。manifest . permission . network _ SEtuP _ WIZARD,

安卓。manifest . permission . network _ STACK })

@SystemApi

publicationvoitsetairplane mode(booleaenable){

尝试{

mService.setAirplaneMode(启用);

} catch(RemoteException e) {

throwe.rethrowFromSystemServer

}

}

MService是IConnectivityManager,是一个接口。它的实现依赖于connectionservice # setairplane mode。

ConnectivityService # setairplane mode

/AOSP/框架/基础/服务/核心/Java/com/Android/服务器

@覆盖

publicationvoitsetairplane mode(booleaenable){

强制网络设置或设置;

final longient = binder . clearcallingidentity;

尝试{

financicontentresolver Cr = McContext . GetContentresolver;

设置。Global.putInt(cr,Settings。全局。飞机_模式_开,编码(启用));

意向=新意向(意向。ACTION _ FAMILY _ MODE _ CHANGED);

intent.putExtra( "state ",enable);

mcontext . SendBroadcastasuser(intent,UserHandle。ALL);

}最后{

binder . restore callingIdentity(ident);

}

}

在这里,设置飞行模式状态的系统变量,并发送动作_飞机_模式_已更改系统广播。接下来看播出的接受度。搜索后,ACTION _ FAMILY _ MODE _ CHANGED广播被多次接受,当飞机模式打开或关闭时,无线电无线通信主要打开或关闭,其处理逻辑在PhoneGlobals类中。此外,可以相应地跟踪WiFi、蜂窝数据和蓝牙处理。

补充:什么是电台?无线电是无线通信模块的驱动程序,负责网络通信。

电话全球

AOSP/套餐/服务/电话/src/com/Android/phone/phone globals . Java

publicClassPhoneGlobalSexTendScontextwrapper {

//省略其他代码

privatedinvhandleairlanemodechange(上下文上下文,intnewMode){

intcellState =设置。global . GetInt(context . GetContentResolver,

设置。全局。CELL_ON,PhoneConstants。CELL _ ON _ FLAG);

booleanisairplaneNewlyon =(new mode = = 1);

开关(cellState) {

casePhoneConstants。单元格_关闭_标志:

//如果用户

//已关闭。

打破;

casePhoneConstants。单元格_开_标志:

mebeturnchelloff(context,isairplanenlyon);

打破;

casePhoneConstants。电池_关闭_到期_飞机_模式_标志:

mebeturncellon(context,isairplanenlyon);

打破;

}

}

/*

*如果进入飞机模式时必须关闭收音机,则返回真。

*/

privatebooleanischelloffiairplane模式(上下文上下文上下文){

字符串airplaneModeRadios =设置。global . GetString(context . GetContentResolver,

设置。global . AIRPORT _ MODE _ RATIONS);

returnairplaneModeRadios = = null

|| airplaneModeRadios.contains(设置。global . RAdio _ CELL);

}

privatevoidsetRadioPowerOff(上下文上下文上下文){

Log.i(LOG_TAG,“关闭飞机无线电”);

设置。global . putint(context . getcontentresolver,Settings。全局。CELL_ON,

PhoneConstants。CELL _ OFF _ DUE _ TO _ FAMILY _ MODE _ FLAG);

systemproperties . set(" persist . radio . airline _ mode _ on "," 1 ");

设置。global . putint(getContentResolver,Settings。global . ENABLE _ CELL _ ON _ BOOT,0);

phonetutils . SetRadiower(false);

}

privatevoidsetRadioPowerOn(上下文上下文上下文){

Log.i(LOG_TAG,“在飞机上打开无线电”);

设置。global . putint(context . getcontentresolver,Settings。全局。CELL_ON,

PhoneConstants。CELL _ ON _ FLAG);

设置。global . putint(getContentResolver,Settings。全局。启用_蜂窝_开机_启动,

1);

systemproperties . set(" persist . radio . airline _ mode _ on "," 0 ");

phonetutils . SetRadiower(true);

}

privatevoidmaybeTurnCellOff(上下文上下文,booleanisAirplaneNewlyOn){

if(isAirplaneNewlyOn) {

//如果我们试图关闭收音机,请确保没有激活的

//紧急电话。如果有,将飞机模式切换回关闭。

TelecomManager TM =(TelecomManager)context . GetSystemServiCe(TELECOM _ ServiCe);

if(tm!= null & amp& ampTM . IsinergencyCall){

//将飞机模式切换回关闭状态。

ConnectivityManager.from( this)。setAirPlaneMode(false);

吐司. makeText(这个,r . string . radio _ off _ during _ emergency _ call,吐司。长度_长)

。显示;

Log.i(LOG_TAG,“忽略飞机模式:紧急呼叫。关闭飞机”);

} else if(IsCelloffiairPlaneMode(context)){

setRadioPowerOff(上下文);

} else{

Log.i(LOG_TAG,“忽略飞机模式:设置阻止手机无线电关机”);

}

}

}

privatevoidmaybeTurnCellOn(上下文上下文,booleanisAirplaneNewlyOn){

if(!isAirplaneNewlyOn) {

setRadioPowerOn(上下文);

}

}

/**

*手机应用程序关心的杂项意图广播接收器。

*/

privateClassPhoneappBroadcastReceiveRexTendsBroadcastReceiver {

@覆盖

publicvoidonReceive(上下文上下文,意图意图){

String action = intent.getAction

if(action.equals(Intent .动作_飞机_模式_已更改){

在飞机模式=设置。global . GetInt(GetContentResolver,

设置。全局.飞机_模式_开,飞机_关);

//将任何非关值视为开。

if(飞机模式!=飞机_关闭){

飞机模式=飞机_开;

}

handleAirplaneModeChange(上下文,Airlanemode);

}//省略其他代码

}

}

//省略其他代码

}

PhoneUtils.setRadioPower会继续调用GsmCdmaPhone # setRadioPower,调用mSST.setRadioPower,最后mSST对象会向RIL对象发送关闭或打开Radio无线通信模块的请求,这里就不细看了,不过有兴趣可以继续关注。这里说的是“安卓点击飞行模式会怎么样?”大致了解了过程,就结束了。

1.《airplane Android 当点击飞行模式都发生了什么?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《airplane Android 当点击飞行模式都发生了什么?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guonei/1065324.html

上一篇

2020中国已痛失36位院士 究竟发生了什么?

下一篇

陈奕迅称很久没有收入了 到底什么情况呢?

新加坡航空推飞机餐厅 真相到底是怎样的?

新加坡航空推飞机餐厅 真相到底是怎样的?

10月26日飞虎队最近受疫情影响,新航空推出飞机餐厅。新闻稿发布后,引起网友热议。具体内容如下:10月24日,由于疫情影响,新航空公司的空客用A380餐厅正式开业。人们可以登上停飞的飞机,一边欣赏电影,一边享受美食。...

英国富人乘私人飞机逃离二次封城 还原事发经过及背后真相!

英国富人乘私人飞机逃离二次封城 还原事发经过及背后真相!

星空在线11月5日讯近日,英国一家飞机租赁公司透露,由于英国第二次封城,部分富人提前预订私人飞机,在封城前离开英国,前往欧洲大陆的其他住所。从周四开始,英国将关闭一个月,以遏制新冠肺炎疫情的反弹。据悉,私人飞机单程飞行费用...

uicolor iOS13-适配夜间模式/深色外观

uicolor iOS13-适配夜间模式/深色外观

作者RayJiang97 https://www.jianshu.com/p/e6616e44cf60 最近,iOS 13在WWDC 19上发布。我们来看看如何适应黑暗模式。 首先,我们来看看效果图  外观选择任意,黑色,如图所示  让我们把黑暗模式的图片拖进来,如图所示  最后,我们添加了...

木叶丸仙人模式第几集

木叶丸仙人模式第几集

木叶丸第一次在实战中开启神仙模式是在第383集《爆发!神仙模式。另外,从372集开始到395集,出现了木叶丸的神仙格局。神仙模式是火影忍者中的一种忍者,用自然的能量创造“脉轮”,可以极大的增强忍者的力量,体术和幻术。火影忍者,自来也和药师兜将使用这种模式。在第四次世界大战的隐忍中,宇智河马达拉用出生在路外的轮...

航班实时动态跟踪 飞机也逃脱不出百度天眼时时追踪,实时动态反馈

  • 航班实时动态跟踪 飞机也逃脱不出百度天眼时时追踪,实时动态反馈
  • 航班实时动态跟踪 飞机也逃脱不出百度天眼时时追踪,实时动态反馈
  • 航班实时动态跟踪 飞机也逃脱不出百度天眼时时追踪,实时动态反馈
中国联航飞机没油 真相到底是怎样的?

中国联航飞机没油 真相到底是怎样的?

5月13日,一名乘客称,他乘坐的中国联合航空公司的KN5769航班在南苑机场已经排了快两个小时的队,然后飞机没油了,回去加油。许多朋友看到飞机在排队起飞时返回停机坪加油。在这里,记者想和你谈谈科普。这是保证飞行安全、提高效...

长沙飞机疑失事坠机 究竟发生了什么?

长沙飞机疑失事坠机 究竟发生了什么?

今天下午两点左右,有市民反映,一架从株洲飞往宁乡的小飞机在长沙宁乡的巷子口坠毁。图片来源于记者李国洪图片来自记者李国洪据了解,飞机即将降落时坠毁,机身被烧毁,机上一名女飞行员和一名男子被烧毁。目前,伤者已被送往医院。根据最...

福州SUV险撞飞机 登上网络热搜了!

福州SUV险撞飞机 登上网络热搜了!

7月22日,有网友视频爆料,福州长乐机场一辆SUV差点与正在滑行的厦航客机相撞。随后,福州机场回应称,机场正在进一步调查,经核实,将严肃处理责任单位和责任人。记者在视频中看到,飞机左转上滑行道,一辆SUV和一辆大巴从远处驶...