在移植Android的系统中,遇到了飞行模式中在操作一次之后,globalaction(长按power键出来的dialog就是globalaction)中的item变成了灰色,并且不可操作,之后对代码进行了分析,解决了问题,特此记录,以备有需要的朋友。

现象:长按住power键后->弹出globalaction对话框->选择飞行模式->对话框会自动关闭->再次长按住power键后->->弹出globalaction对话框->此时对话框的飞行模式一直都是灰色状态,且不能做任何操作

其实问题的原因在于源码在编译的时候关闭了电话模块或者是电话的状态没有接好之类的问题,下面看代码理解流程吧:

在globalactions中静音和飞行模式都是一个toggleaction,下面先看ToggleAction的create的代码:

willCreate();

View v = (convertView != null) ?

convertView :

inflater.inflate(R

.layout.global_actions_item, parent, false);

ImageView icon = (ImageView) v.findViewById(R.id.icon);

TextView messageView = (TextView) v.findViewById(R.id.message);

TextView statusView = (TextView) v.findViewById(R.id.status);

messageView.setText(mMessageResId);

boolean on = ((mState == State.On) || (mState == State.TurningOn));

icon.setImageDrawable(context.getResources().getDrawable(

(on ? mEnabledIconResId : mDisabledIconResid)));

statusView.setText(on ? mEnabledStatusMessageResId : mDisabledStatusMessageResId);

statusView.setVisibility(View.VISIBLE);

boolean enabled = isEnabled();    //判断现在是否是出于飞行模式切换的中间状态,这也是第二次打开globalaction中飞行模式无法操作的问题

//下面会设置一个globalaction中toggleaction内的元素状态

messageView.setEnabled(enabled);

statusView.setEnabled(enabled);

icon.setEnabled(enabled);

v.setEnabled(enabled);

下面再看isEnabled的实现:

return !mState.inTransition();            //实际上是返回一个boolean的state,来判断他是不是在中间状态,由于没有电话信号的设置,所以在设置过一次的时候,他会一直出于中间状态,但是这里我还没有弄清楚在电话状态正常的时候这个state设怎么更新的

再看globalactions的构造函数中有这么一段:

TelephonyManager telephonyManager =

(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);

这里会注册一个mPhoneStateListener来listen LISTEN_SERVICE_STATE,正是因为我们的phone有问题实际上调用不到该回调的,因为再其的回调函数中是有飞行模式的toggleaction状态的设置(通过mAirplaneState),因此会导致上面我们说到的现象。

因此,倘若要修正的话我的方法是inTransition直接return false来认为他已经不是中间状态,在你需要关心飞行模式状态的地方注册broadcastReciver来接收ACTION_AIRPLANE_MODE_CHANGED,在broadcastReciver添加相应的ACTION_AIRPLANE_MODE_CHANGED发生时需要的行为。例如statusbar的icon的变换(原来的代码对icon的变换还是监听的电话的service state)。

linux 自动开飞行模式,Android飞行模式灰显不能操作问题分解相关推荐

  1. android飞行模式灰显不能操作问题分解

    在移植Android的系统中,遇到了飞行模式中在操作一次之后,globalaction(长按power键出来的dialog就是globalaction)中的item变成了灰色,并且不可操作,之后对代码 ...

  2. android自动切换暗色,超实用!Android 深色模式适配(可定时开启的APP内主题切换管理工具)...

    前言 前面分享了一篇"黑白化主题"的文,主要适用场景是不久就要到来的"清明"等时节或者是其他的国家公祭日什么的(一名成熟的程序员,要学会自己提产品需求). 今天 ...

  3. android自动夜间模式,Android 夜间模式初探

    当下各种阅读类APP(如各种浏览器,某日头条等)都会有夜间模式,也顺应了大家的睡前必须玩一下手机的作息习惯.关于夜间模式的实现,有很多种方法.这篇日志学习一下最简单的实现方式,通过setTheme(i ...

  4. android官方夜间模式,Android夜间模式实践

    前言 由于项目需要,近段时间开发的夜间模式功能.主流的方案如下: 1.通过切换theme实现 2.通过resource id映射实现 3.通过Android Support Library的实现 方案 ...

  5. android l art模式,Android ART模式简介

    Android4.4最大的变化就是引入ART模式来代替Dalvik虚拟机.ART是Android Runtime的缩写,它提供了以AOT(Ahead-Of-Time)的方式运行Android应用程序的 ...

  6. android静音模式,android静音模式下仍可以播放媒体声音以及调节其大小。。。。...

    不多说,先上图,先看一张我开发板的截图  ... 首先我先解释一下: 由于我的开发板硬件没有调节声音的按键,因而只能在图中所示 处调节,但是在静音之后,那个声音调节又不可点击,所以我们要在静音模式下使 ...

  7. android 严苛模式,Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  8. linux自动截屏脚本,Android实现自动截图脚本

    做开发的总会碰到测试或者项目经理问你要某个界面截图的情况,用手机的快捷键截图再上传效率不高,又不太想用手机助手(怕全家桶),便打起Android的ADB命令的主意.adb指令中screencap指令就 ...

  9. android恢复 模式,Android Doze模式使用命令启用和恢复

    1,用 adb shell dumpsys battery 这段命令查看一下手机当前的状态; --->USB powered:true 2,用adb shell dumpsys battery ...

  10. Android系统移植与调试之-------如何修改Android设备添加重启、飞行模式、静音模式等功能(一)...

    1.首先先来看一下修改前后的效果对比图 修改之后的图片 确认重启界面 具体的修改内容在下一篇中具体介绍. Android系统移植与调试之------->如何修改Android设备添加重启.飞行模 ...

最新文章

  1. linux内核syscall_define6,Syscall系统调用Linux内核跟踪
  2. leetcode算法第9题
  3. Oracle E-Business Suite Maintenance Guide Release 12.2(Patching Utilities)
  4. 汉字我在计算机中的处理过程,详细说明汉字在计算机中的处理流程以及汉字编码在处理过程中的转化关系...
  5. python能做哪些客户端_Python 实现简单的客户端认证
  6. 对于python的感受_聊聊我对python的感受
  7. 支付宝系统架构参考(架构图,最新揭秘)
  8. C#进行MapX二次开发之地图搜索
  9. 18讲项目实战签证详细页
  10. 杭州毕业生就业创业补贴全攻略
  11. 工控ARM板登陆、wifi连接
  12. UG编程加工之非切削移动
  13. 什么是PO设计(封装)?
  14. eclipse导入项目jsp文件报错
  15. 【uniApp 接入萤石云】
  16. JAVA程序设计题解与上机指导 第四版 第8章 Java的图形用户界面设计 8.2 创建“My JFrame”
  17. JUnit与Mockito单元测试典型示例
  18. 运维总监不会告诉你这些有趣但鲜为人知的 Linux 命令
  19. Rational Rose 2007的详细安装步骤
  20. 如何监控手机网络请求

热门文章

  1. 11月7日简单标签与Listener培训日记
  2. 有关分组、帧、报文、比特流的问题
  3. linux vim 编译python,Ubuntu下编译Vim8(+python)无数次编译失败
  4. android studio发包,androidstudio使用gradle打包配置详解.pdf
  5. mongodb创建local库用户_MongoDB 在系统数据库local上无法创建用户的解决方法
  6. easyui 提示框组件_jQuery EasyUI 教程-Tooltip(提示框)
  7. 【牛客练习赛58-C】矩阵消除游戏(dfs+状态标记)
  8. 【洛谷P1774】最接近神的人_NOI导刊2010提高(02)(模版题---求逆序对数目+离散化---树状数组/权值线段树)
  9. linux 脚本监控程序,用shell脚本实现监控程序自动重启
  10. 易筋SpringBoot 2.1 | 第廿六篇:SpringBoot访问缓存抽象Cache