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

效果如图:

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

时间: 2024-11-10 01:21:01

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

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

今天在练习PopupWindow弹出框的时候,打算在界面加载的时候将弹出框展现出来并显示在指定的view下面. 初步方法是直接在OnResume方法里面直接执行showPopupWindows方法. 但是报“Unable to add window -- token null is not valid; is your activity running?” 原因参考:http://cb269267.iteye.com/blog/1787779 总结下原因如下:popupwindow必须要指定一个

android4.0默认界面旋转180

不巧新拿的android4.0默认启动画面和正常显示旋转了180度,即为倒立的.原来是屏输出为倒的,查找得知可以做旋转: 步骤: 一:先把这个加上 然后加上属性ro.sf.hwrotation = 180 二:在init.rc脚本中添加如下内容:      setprop ro.sf.hwrotation180 修改frameworks/base/services/surfaceflinger/SurfaceFlinger.cpp文件,在voidGraphicPlane::setDisplayH

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

作者刚开始写ASP+程序时候碰到的第一个比较大的问题就是中文显示问题,运行后发现ASP+从数据库中读 取出来的中文全部变成了?????,有点类似jsp中的这个频率出现最高的中文显示问题了,查了资料发现有 两种方法可以轻松解决中文问题. 方法一: 在翻阅了微软NGWS文档后发现在文档的常见问题部分有提到要添加一个config.web文件到 web目录下,试了一下,中文显示果然OK了. 方法如下: 建立一个文件config.web,内容如下,放在WEB目录下 <configuration> <

[bug修复方案分享]Android4.0以上弹出Notification时图标显示不正常

1. 现象 在Android4.0以上系统中,弹出通知栏消息时图标显示不全,如下图: v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·'"

转载- 支持Android4.0以下webp的使用

原文地址: http://blog.csdn.net/jiwangkailai02/article/details/17015451 支持Android4.0以下webp的使用 分类: Android相关2013-11-30 16:53 1658人阅读 评论(2) 收藏 举报 AndroidWebp 最近项目中需要使用到webp,主要目的是减少网络流量(同一张图片,webp格式能比jpg格式小约30%).但是Android在4.0以上BitmapFactory才支持webp,今天的操作就是要使A

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

在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度,算了,自己动手查阅了资料之后,具体实现如下: 在工程的根目录 创建2个文件,分别: 1.build.xml 2.build.properties build.xml的内容: [java] view plaincopyprint? <?xml version="1.0" encodi

浅谈android4.0开发之GridLayout布局

作者:李响 本文重点讲述了自android4.0版本号后新增的GridLayout网格布局的一些基本内容,并在此基础上实现了一个简单的计算器布局框架.通过本文,您可以了解到一些android UI开发的新特性,并可以实现相关应用. 在android4.0版本号之前,假设想要达到网格布局的效果,首先能够考虑使用最常见的LinearLayout布局,可是这种排布会产生例如以下几点问题: 1.不能同一时候在X,Y轴方向上进行控件的对齐. 2.当多层布局嵌套时会有性能问题. 3.不能稳定地支持一些支持自

Ubuntu12.04下载Android4.0.1源码全过程,附若干问题解决[转]

学校里一直在做应用层开发,考虑到日后就业问题,这次决定研究源码和驱动,并进行编译.没想到就下载源码这一步折腾了我整整两天,期间遇到很多问题,哎,记录于此,希望日后再下源码的人不要再走无谓的弯路了.事实上可以在这里http://zhu.im/Android/下载源码,但是google推荐用repo来下载,为了多学东西就学下repo吧,毕竟下现成的也太么含量了.最初我参考的是老罗的博客http://blog.csdn.net/luoshengyang/article/details/6559955

Android4.0中AppWidget的一些新玩意体验---RemoteViewsService

最近要把之前做的2.3上面的一些程序移植到4.0上面来,  几乎所有的AppWidget都是我一手操办, 所以这个玩意都是我弄. 我把Android2.3的代码直接拷到4.0的环境下面, 编译然后Push,  直接可以跑, 这是木有问题的.  但是我发现4.0上面有一些新东东是之前2.3上面没有的, 我也读了下官方的文档, 做了些demo, 这里总结给大家, 在以后需要做AppWidget的时候可以得心应手. 1: 应用列表中的预览图 如果你不想你的Widget在应用列表里面显示成那个丑机器人图