效果如图:

一、 在frameworks/base/packages/SystemUI/res/values/strings.xml 里加入

  1. <string name="headset_enabled">Headset Enabled.</string>

二、 在fameworks/base/core/res/res/values/config.xml 里对应位置加入:

  1. @@ -45,6 +45,7 @@
  2. <item><xliff:g id="id">alarm_clock</xliff:g></item>
  3. <item><xliff:g id="id">secure</xliff:g></item>
  4. <item><xliff:g id="id">clock</xliff:g></item>
  5. +       <item><xliff:g id="id">headset</xliff:g></item>
  6. </string-array>

上面带+号的行为加入的

三、 frameworks/base/packages/SystemUI/res/drawable-xhdpi 或者你手机相应的分辨率的目录下加入stat_sys_headset.png和stat_sys_headset_mic.png

两个图片, 分别表示不带mic的耳机和带mic的耳机, 这两个图标将在状态栏显示, 图片能够自己找,也能够从fameworks/base/core/res/res/drawable-xhdpi里面提取现成的

四、 在frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java 打上以下的补丁:

  1. --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
  2. +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
  3. @@ -103,6 +103,9 @@ public class PhoneStatusBarPolicy {
  4. else if (action.equals(TtyIntent.TTY_ENABLED_CHANGE_ACTION)) {
  5. updateTTY(intent);
  6. }
  7. +            else if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
  8. +                updateHeadset(intent);
  9. +            }
  10. }
  11. };
  12. @@ -119,6 +122,7 @@ public class PhoneStatusBarPolicy {
  13. filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
  14. filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
  15. filter.addAction(TtyIntent.TTY_ENABLED_CHANGE_ACTION);
  16. +        filter.addAction(Intent.ACTION_HEADSET_PLUG);
  17. mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
  18. int numPhones = MSimTelephonyManager.getDefault().getPhoneCount();
  19. @@ -276,4 +280,29 @@ public class PhoneStatusBarPolicy {
  20. mService.setIconVisibility("tty", false);
  21. }
  22. }
  23. +
  24. +    private final void updateHeadset(Intent intent) {
  25. +        final String action = intent.getAction();
  26. +        final int state = intent.getIntExtra("state", 4);
  27. +        final int mic = intent.getIntExtra("microphone", 4);
  28. +
  29. +        switch (state) {
  30. +        case 0:
  31. +            try{
  32. +                mService.setIconVisibility("headset", false);
  33. +            } catch (Exception e) {
  34. +                //Log.i("StatusBar Headset", "frist time to run");
  35. +                }
  36. +        break;
  37. +        case 1:
  38. +            if (mic == 1)
  39. +                mService.setIcon("headset", R.drawable.stat_sys_headset_mic, 0,
  40. +                    mContext.getResources().getString(R.string.headset_enabled));
  41. +            else
  42. +                mService.setIcon("headset", R.drawable.stat_sys_headset, 0,
  43. +                    mContext.getResources().getString(R.string.headset_enabled));
  44. +            mService.setIconVisibility("headset", true);
  45. +        break;
  46. +        }
  47. +    }
  48. }

smali版本号參考本人github上的lewa的patchrom代码:

https://github.com/syhost/lewa_patchrom_ef65l/commit/202a790d5c3e4dfb8fdfb6e837d96fd69e79d448

当然要结合上面的源代码, 只作为參考 由于跟你的smali代码应该会差异非常大

转载于:https://www.cnblogs.com/zsychanpin/p/6971689.html

Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...相关推荐

  1. android隐藏底部栏,Android4.0平板开发之隐藏底部任务栏的方法

    本文实例讲述了Android4.0平板开发之隐藏底部任务栏的方法.分享给大家供大家参考,具体如下: getWindow().getDecorView().setSystemUiVisibility(V ...

  2. Android 打开蓝牙状态栏显示蓝牙图标 2020-12-03

    系统默认是蓝牙链接后才在状态栏显示蓝牙图标 现在修改为打开蓝牙就在状态栏显示蓝牙图标 frameworks/base/packages/SystemUI/src/com/android/systemu ...

  3. 状态栏显示Volte图标

    用户手机SIM卡开通Volte业务后,当SIM卡驻Volte网络时,状态栏会显示VoLTE图标. 1.运营商定制:插入特定sim卡,实现特定的功能 通过"KEY_SHOW_VOLTE_ICO ...

  4. 手机投屏电视显示服务器连接失败,投屏失败怎么办?两种投屏到电视的方法教学...

    我们在使用手机投屏功能时总会遇到各种问题,比如说:找不到设备.投屏 失败等,遇到这种情况怎么办?小编为大家提供两种方式. 手机投屏电视主要有无线和有线两种方式,先来说说无线方式: 一.无线连接 使用无 ...

  5. python wait until_荐selenium显示等待怎么写之WebDriverWait中until的两种实现方式及原理分析...

    关于显示等待WebDriverWait是什么,可以看selenium-wait源码解析 话不多说,先上实现代码: 第一种实现方式(官方提供): from selenium.webdriver.supp ...

  6. html dashed显示实线怎么改,实现css虚线样式的两种方式:dotted和dashed(实例)

    css虚线边框怎么做?html虚线边框设置一般会想到border的solid,html网页布局中solid用的概率最高了,要有css虚线的效果还可以用图片做背景,但是不推荐,尽量使用css虚线样式做这 ...

  7. w10的计算机图标在桌面显示,一学就会的win10桌面怎么显示我的电脑图标方法

    安装win10系统后,大家在桌面上已经无法找到我们以前所熟悉的[我的电脑]了,这令我们在寻找文件非常不适应,拖慢了我们的办事效率,win10桌面怎么显示我的电脑,下面让小编来教大家. win10桌面显 ...

  8. dnf选择服务器显示数字,DNF:遴选属性如何选择?两种方法精确找到最优解

    原标题:DNF:遴选属性如何选择?两种方法精确找到最优解 DNF:遴选属性如何选择?两种方法精确找到最优解 本文由Sky灬素颜游戏视频原创,请勿抄袭或转载,谢谢. 自黑鸦之境更新以来,很多小伙伴都问到 ...

  9. 请用两种java方式显示今天的日期_日期时间显示格式的两种设置方法

    在国内行业的各类报表中日期和时间可以算是最长见的一个数据单位了,几乎所有的报表都可以和时间拉上关系,而且报表浏览者也大都要求报表中有时间日期,这样才能让报表信息更清晰明了.但是时间和日期在数据库中的存 ...

最新文章

  1. Java SSH Hibernate通过代码实现从数据库中随机取出指定条数的随机数据
  2. 如何用命令将本地项目上传到git
  3. 创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...
  4. Atitit 项目的主体设计与结构文档 v5
  5. rhel配置磁盘分区_rhel配置磁盘分区_centos系统三套硬盘分区方案[图文设置版]
  6. 【Alpha】开发日志Day8-0719
  7. 爱情九十六课,位置决定爱情
  8. QT编译boost库
  9. ARM系统中断产生流程
  10. 数据库、C#、Java生成唯一GUID 方法
  11. 鸡蛋究竟宜不宜生吃——看阿里云计算怎么破?
  12. 矢量叉积与折线段拐向判断---三角形顺逆判断
  13. 科学计算机要用的电池是几号,科学的使用笔记本电池操作指南_硬件教程
  14. 使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题
  15. 解决Mac安装Adobe软件错误代码501问题(PS AI AE PR)mac安装Adobe软件报错501解决方案
  16. 服务器系统怎么设置从光盘启动,电脑BIOS怎么设置光盘启动 三种类型BIOS设置光驱启动的图文详解教程...
  17. 自己退出微信小程序开发者权限
  18. Exp9 Web安全基础实践 20164323段钊阳
  19. 很好用的程序员在线画图软件
  20. 2022年PMP考试题型都有什么?

热门文章

  1. html 音乐播放透明,HTML如何设置video为不透明背景
  2. android 应用程序分析之settings,Android 应用程序分析之Settings
  3. C语言程序设计蔺德军,C语言程序设计上机实验与习题解答(第2版)
  4. smarty中打印php变量,smarty用php标签怎么输出变量
  5. java数组转换成字符串,附小技巧
  6. 深度学习中Flatten层的作用
  7. 【408预推免复习】计算机网络(谢希仁第七版)第一章——概述
  8. python【数据结构与算法】KMP算法模板(我吐了!)
  9. 【Kali渗透全方位实战】利用Beef进行XSS会话劫持(XSS Stored)
  10. Python程序设计题解【蓝桥杯官网题库】 DAY10-算法训练