效果如图:

一、 在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代码应该会差异非常大

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

  1. 练习PopupWindow弹出框之实现界面加载的时候显示弹出框到指定的view下面--两种延迟方法

    今天在练习PopupWindow弹出框的时候,打算在界面加载的时候将弹出框展现出来并显示在指定的view下面. 初步方法是直接在OnResume方法里面直接执行showPopupWindows方法. ...

  2. java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)

    方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余 package com.swift; import java.awt.BorderLayout; import java.awt.Color; ...

  3. android4.0默认界面旋转180

    不巧新拿的android4.0默认启动画面和正常显示旋转了180度,即为倒立的.原来是屏输出为倒的,查找得知可以做旋转: 步骤: 一:先把这个加上 然后加上属性ro.sf.hwrotation = 1 ...

  4. Android常用控件之Fragment仿Android4.0设置界面

    Fragment是Android3.0新增的概念,是碎片的意思,它和Activity很相像,用来在一个Activity中描述一些行为或部分用户界面:使用多个Fragment可以在一个单独的Activi ...

  5. SpringMVC 全注解实现 (1) servlet3.0以上的容器支持

    一. Spring MVC入门 1.1 request的处理过程 用户每次点击浏览器界面的一个按钮,都发出一个web请求(request).一个web请求的工作就像一个快递员,负责将信息从一个地方运送 ...

  6. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  7. ASP+中文显示之两种解决方法

    作者刚開始写ASP+程序时候碰到的第一个比較大的问题就是中文显示问题,执行后发现ASP+从数据库中读  取出来的中文所有变成了?????,有点相似jsp中的这个频率出现最高的中文显示问题了,查了资料发 ...

  8. [转]使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)

    在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度 ...

  9. android4.0 4.1 4.2 4.3 4.4新特性

    http://blog.csdn.net/kaiyang45/article/details/7179349 4.0 http://digi.tech.qq.com/a/20120628/000827 ...

随机推荐

  1. 大话git中的撤销操作

    下面以现实场景作为情境. 基础知识,理解git中的几个区域 本地代码已经add,未commit 修改本地工作目录中的readme.md,添加文字"第一次修改" 然后查看下状态 ➜ ...

  2. .NET Core多平台项目模板eShopOnContainers编译手记

    之前写了一个功能性的文件上传asp.net core的小程序,加上点七七八八的东西,勉强能够应付了,打算学习一下微软的官方.NET CORE微服务示例https://github.com/dotnet ...

  3. js滚动加载小插件

    本文实例讲述了jquery滚动加载数据的方法.分享给大家供大家参考.具体分析如下: 少废话直接上代码!!!粗暴,直接,干脆 0//lk-2017-05-04 1(function($, win) { ...

  4. 异步获取CMD命令行输出内容

    当控制台命令使用process.Start(); 后可以直接显示输出内容,当然它是异步显示的不用等程序结束.代码如下: using System;using System.Collections.Ge ...

  5. [转载] Solr使用入门指南

    转载自http://blog.csdn.net/liuzhenwen/article/details/4060922 由于搜索引擎功能在门户社区中对提高用户体验有着重要的作用,在门户社区中涉及大量需要 ...

  6. Python之numpy模块array简短学习

    1.简介 Python的lists是非常的灵活以及易于使用.但是在处理科学计算相关大数量的时候,有点显得捉襟见肘了. Numpy提供一个强大的N维数组对象(ndarray),包含一些列同类型的元素,这 ...

  7. [转]Oracle 重建索引的必要性

    http://blog.csdn.net/leshami/article/details/23763963 索引重建是一个争论不休被不断热烈讨论的议题.当然Oracle官方也有自己的观点,我们很多DB ...

  8. thinphp原生异步分页

    异步分页: $sql="............";   $result=$m->query($sql);   $count =count($result);   $page ...

  9. iPhone X 网页导航概念

     以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   在移动应用程序设计中,选择汉堡菜单按钮还是标签栏作为导航一直是个古老的争论话题.目前看来,由于 ...

  10. spring aop使用

    最近做一个数据库分离的功能,其中用到了spring aop,主要思路就是在service层的方法执行前根据注解(当然也可以根据方法名称,如果方法名称写的比较统一的话)来判断具体使用哪个库.所以想着再回 ...