android实现添加耳机状态图标的方法

本文实例讲述了android实现添加耳机状态图标的方法。分享给大家供大家参考。具体如下:

原生态的android系统是没有耳机插入或未插入的状态指示的,本文就是讲解如何添加耳机插入的状态指示。效果图如下

如图,当插入耳机后,在status bar上出现了一个耳机的图标。

这个耳机的图标和sim卡信号等图标在status bar的右边,因此这个实现肯定不是通过notification实现的,那么添加这个功能只能在framwork里面寻找了。具体的修改步骤如下:

1.在frameworks/base/core/res/res/drawable-mdpi目录先添加一个stat_sys_headset.png资源文件。这里面资源文件的目录要根据设备的分辨率来确定,我的设备是HVGA的,因此资源文件放在drawable-mdpi目录下。

2.修改frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java

public class StatusBarPolicy {
 private static final String TAG = "StatusBarPolicy";
 private static StatusBarPolicy sInstance;
 .....
 // alarm clock
 // Icon lit when clock is set
 private IBinder mAlarmClockIcon;
 private IconData mAlarmClockIconData;
 //modify here start
 //HeadSet
 private IBinder mHeadSetPlugIcon;
 private IconData mHeadSetPlugIconData;
 //modify here end
 .....
 private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   String action = intent.getAction();
   if (action.equals(Intent.ACTION_TIME_TICK)) {
    updateClock();
   }
   .....
   else if (action.equals(Intent.ACTION_ALARM_CHANGED)) {
    updateAlarm(intent);
   }
   //modify here start
   else if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
    updateHeadset(intent);
   }
   //modify here end
   else if (action.equals(Intent.ACTION_SYNC_STATE_CHANGED)) {
    updateSyncState(intent);
   }
   ......
  };
  private StatusBarPolicy(Context context, StatusBarService service) {
  mContext = context;
  mService = service;
  mSignalStrength = new SignalStrength();
  if(FeatureOption.MTK_GEMINI_SUPPORT == true) {
   mSignalStrengthGemini = new SignalStrength();
  }
  mBatteryStats = BatteryStatsService.getService();
  ....
  //modify here start
  //HeadSet
  mHeadSetPlugIconData = IconData.makeIcon(
   "headset",
   null,com.android.internal.R.drawable.stat_sys_headset, 0, 0);
  mHeadSetPlugIcon = service.addIcon(mHeadSetPlugIconData, null);
  service.setIconVisibility(mHeadSetPlugIcon, false);
  //modify here end
  ....
  IntentFilter filter = new IntentFilter();
  // Register for Intent broadcasts for...
  filter.addAction(Intent.ACTION_TIME_TICK);
  ....
  //modify here start
  filter.addAction(Intent.ACTION_HEADSET_PLUG);
  //modify here end
  ....
 }
 //modify here start
 private final void updateHeadset(Intent intent) {
  Slog.d(TAG, "updateHeadset: state=" + intent.getIntExtra("state", 0));
  mService.setIconVisibility(mHeadSetPlugIcon, (intent.getIntExtra("state", 0) == 1)?true:false);
 }
 //modify here end
 .....
}

3.修改frameworks/base/core/res/res/values/arrays.xml

<string-array name="status_bar_icon_order">
  <item><xliff:g id="id">clock</xliff:g></item>
  <item><xliff:g id="id">secure</xliff:g></item>
  <item><xliff:g id="id">alarm_clock</xliff:g></item>
  <item><xliff:g id="id">battery</xliff:g></item>
  <item><xliff:g id="id">phone_signal_2</xliff:g></item>
  <item><xliff:g id="id">phone_signal</xliff:g></item>
  <item><xliff:g id="id">phone_evdo_signal</xliff:g></item>
  <item><xliff:g id="id">data_connection</xliff:g></item>
  <item><xliff:g id="id">cdma_eri</xliff:g></item>
  <item><xliff:g id="id">tty</xliff:g></item>
  <item><xliff:g id="id">volume</xliff:g></item>
  <item><xliff:g id="id">mute</xliff:g></item>
  <item><xliff:g id="id">speakerphone</xliff:g></item>
  <!-- modify here start. -->
  <item><xliff:g id="id">headset</xliff:g></item>
  <!-- modify here end -->
  <item><xliff:g id="id">wifi</xliff:g></item>
  <item><xliff:g id="id">tty</xliff:g></item>
  <item><xliff:g id="id">bluetooth</xliff:g></item>
  <item><xliff:g id="id">gps</xliff:g></item>
  <item><xliff:g id="id">sync_active</xliff:g></item>
  <item><xliff:g id="id">sync_failing</xliff:g></item>
  <item><xliff:g id="id">ime</xliff:g></item>
</string-array>

其中“headset”这个字符串就是“mHeadSetPlugIconData = IconData.makeIcon( "headset", null0, 0);”中的第一个参数。“<item><xliff:g id="id">headset</xliff:g></item> ”这个语句的位置于图标在status bar上显示的位置有关。

希望本文所述对大家的Android程序设计有所帮助。

时间: 2015-10-05

android app icon 图标大小尺寸

在android程序中,在drawable中设置好图标后,但结果在小米2可没有显示出来,但在我自己的htc中和模拟器中显示正常.后来发现小米的dpi不一样. 后来发现,android为了适应不同的分辨率和dpi,加载了一系列的图标. LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px. MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px. HDPI (High Density Scre

android如何添加桌面图标和卸载程序后自动删除图标

1:创建图标如下 复制代码 代码如下: Intent intent = new Intent(); intent.setClass(this, SplashActivity.class); Intent addShortcut = new Intent(ACTION_ADD_SHORTCUT); Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); addShortcut.putExtr

android中TabHost的图标(48&#215;48)和文字叠加解决方法

开发过程中,有时候图标稍微大点,比如48×48的时候,文字就会和图标叠加起来,解决方法如下: 复制代码 代码如下: TabWidget tw = tabHost.getTabWidget(); for (int i = 0; i < tw.getChildCount(); i++) {     TextView tv=(TextView)tw.getChildAt(i).findViewById(android.R.id.title);     ImageView iv=(ImageView)t

Android应用图标在状态栏上显示实现原理

一.前方 在研究<Android类似360,QQ管家那样的悬浮窗>突发奇想,想把应用的图标也显示到状态栏上,类似手机QQ,而有消息来时改变状态栏上的图标显示. 二.原理 其实很研究完后,才发现,很简单: 2.1 显示图标在状态栏上 复制代码 代码如下: NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Notification n = new Notifi

Android不使用自定义布局情况下实现自定义通知栏图标的方法

本文实例讲述了Android不使用自定义布局情况下实现自定义通知栏图标的方法.分享给大家供大家参考,具体如下: 自定义通知栏图标?不是很简单么.自定义布局都不在话下! 是的,有xml布局文件当然一切都很简单,如果不给你布局文件用呢? 听我慢慢道来! 首先怎么创建一个通知呢? 1.new 一个 复制代码 代码如下: Notification n = new Notification(android.R.drawable.ic_menu_share, null, System.currentTime

Android应用中制作选中后图标变大浮动效果的代码分享

最近在玩3g体育门户客户端的时候,看到这样个效果: 轻触赛事图标,会有一个图标变大浮出的效果.,蛮有意思的.于是就把仿照它做了一个.   这个是原图: 实际上是给图标的触摸事件中添加了一个缩放的动画,代码如下. package com.test; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import andro

android实现状态栏添加图标的函数实例

本文实例讲述了android实现状态栏添加图标的函数.分享给大家供大家参考.具体如下: private void showNotification() { // 创建一个NotificationManager的引用 NotificationManager notificationManager = (NotificationManager) AutoFile.this.getSystemService(android.content.Context.NOTIFICATION_SERVICE);

android 左右滑动+索引图标实现方法与代码

使用Gallery和ImageView实现android左右滑动+索引图标效果. 首先自定义Gallery实现一次只能滑动一个页面 复制代码 代码如下: public class MGalleryView extends Gallery{ public MGalleryView(Context context, AttributeSet attrs) { super(context, attrs); } //一次只能滑动一张图片注:一张图充满全屏 @Override public boolean

Android界面 NotificationManager使用Bitmap做图标

今天看到EOE问答里面有这"[Android 界面]NotificationManager 如何使用Bitmap做图标"这样一个问题,在论坛搜索也没有好的案例 特写一个简单的demo供大家参考 今天发布的是NotificationManager 使用Bitmap做图标 关键code 复制代码 代码如下: public void notification(int flag) { Notification notification = new Notification(); //设置sta

Android编程实现图标拖动效果的方法

本文实例讲述了Android编程实现图标拖动效果的方法.分享给大家供大家参考,具体如下: 最近优化图标拖动时的速率,稍微有一点点效果,直接把代码贴出来,有兴趣一起讨论的朋友可以给我留言. 代码如下: DragView.java package com.android.dragtest; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.

Android设置个性化Dialog小图标的方法

本文实例讲述了Android设置个性化Dialog小图标的方法.分享给大家供大家参考,具体如下: 设置个性化Dialog小图标,主要代码如下: @Override protected void onCreate(Bundle savedInstanceState) { // Be sure to call the super class. super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_LEFT_IC

Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡

一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二.编写MyApplication类 public class MyApplication extends Application { private static MyApplication mInstance = null; public boolean m_bKeyRight = true; pu

Android 百度地图POI搜索功能实例代码

在没介绍正文之前先给大家说下poi是什么意思. 由于工作的关系,经常在文件中会看到POI这三个字母的缩写,但是一直对POI的概念和含义没有很详细的去研究其背后代表的意思.今天下班之前,又看到了POI这三个字母,决定认认真真的搜索一些POI具体的含义. POI是英文的缩写,原来的单词是point of interest, 直译成中文就是兴趣点的意思.兴趣点这个词最早来自于导航地图厂商.地图厂商为了提供尽可能多的位置信息,花费了很大的精力去寻找诸如加油站,餐馆,酒店,景点等目的地,这些目的地其实都可

Android百度地图添加Marker失真问题的解决方案

Marker失真问题 由于公司项目原因,用了很多次百度地图API,基础的地图定位.显示地图就不多说了,这里主要说一下百度地图添加Marker图标. 最开始接触百度地图添加Marker图标的时候,发现自己设置的图标是多大地图上就显示多大,感觉有点失真,看起来很不舒服,但通过网上搜索,并没有找到解决办法,就没怎么注意图标失真的问题,毕竟是一个小项目,不是面向大众的,最近开发的一个项目同样有这个需求,而且是面向大众开发的,我就想为什么摩拜单车的图标那么清晰,我的图标却失真. 就是这么清晰 通过Reso

Android百度地图定位后获取周边位置的实现代码

本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

Android 百度地图定位实现仿钉钉签到打卡功能的完整代码

导语 本章根据百度地图API,实现仿钉钉打卡功能.用到了基础地图.覆盖物.定位图层.陀螺仪方法.悬浮信息弹框. 百度地图API地址  :Android 地图SDK 请先注册注册百度账号和获取密钥,并实现地图显示出来.(注意:密钥.权限要设置) 另外,我得说明本章所下载官方Demo 和 导入的jar包和so文件.自定义下载即可,如下图: 接下来,一起看实现效果. 源码Git地址:BaiduMapApp 效果图 实现代码·三步骤 第一步:基础地图和方向传感器 类先实现方向传感器 implements

Android百度地图定位、显示用户当前位置

本文实例为大家分享了Android百度地图定位.显示用户当前位置的工具类,供大家参考,具体内容如下 1.构建定位Option的工具类 import com.baidu.location.LocationClientOption; /** * 建造 LocationClientOption 项 * * @author peter 2018-12-21 10:58 */ public class LocationClientOptionBuilder { private LocationClient

Android百度地图自定义公交路线导航

一.问题描述 基于百度地图实现检索指定城市指定公交的交通路线图,效果如图所示 二.通用组件Application类,主要创建并初始化BMapManager public class App extends Application { static App mDemoApp; //百度MapAPI的管理类 public BMapManager mBMapMan = null; // 授权Key // 申请地址:http://dev.baidu.com/wiki/static/imap/key/ p

Android百度地图应用之创建显示地图

本文是在完成了Android百度地图应用开发基础知识的基础上继续实现的. 本文实例为大家分享了Android如何显示地图,并为后续内容做准备,供大家参考,具体内容如下  1.运行效果  本章共有25个示例,在x86模拟器中运行的效果如下: 下面介绍主要设计步骤.  2.添加资源  (1)drawable-hdpi  Resources/ drawable-hdpi下的文件:将下载的示例对应文件夹下的文件全部拖放到该文件夹下,并将所有[生成操作]属性全部设置为"AndroidResource&qu

Android 百度地图Sha1获取的方法

Android 百度地图Sha1获取的方法 场景一 由于最近项目钟要用到定位功能因此肯定需要用到地图以及地位功能,相信大家也知道目前国内比较出名的地图像百度.高德.腾讯等这些还是用到比较多的,于是思考了一下决定还是用百度,相信老司机们都知道的哈! 第一步到百度开发者平台注册一个账号一般是手机号或者短信动态验证码登录我注册了所以这里不再赘述 第二步就是创建一个应用程序这个名字一般是随意取的这个不用太在意如下图所示 3.获取Sha1这里列举两种方式如果其他有更好的办法可以在下面留言哈! 第一种就是通

Android百度地图之方向感应和模式更改

本文实例为大家分享了Android百度地图之方向感应和模式更改,供大家参考,具体内容如下 目标效果: 菜单中设置几种模式,点击可查看不同的地图形式,这里随便截几张图. 1.首先要去百度地图网站 http://lbsyun.baidu.com/ 2.注册账号后,点击开发->Android地图SDK->获取密钥,进入后显示如下页面. 3.创建应用 4.打开eclipse,选择Window->Preferences->Android->Build,获取SHA1 5.提交后回到上一个