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程序设计有所帮助。

(0)

相关推荐

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

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

  • android中TabHost的图标(48×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如何添加桌面图标和卸载程序后自动删除图标

    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设置个性化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实现状态栏添加图标的函数实例

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

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

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

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

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

  • 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应用图标在状态栏上显示实现原理

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

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

  • Android界面 NotificationManager使用Bitmap做图标

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

随机推荐