SystemUI添加耳机图标
2011-11-25 23:01
323 查看
Google原生的系统在状态栏的图标里并没用耳机的图标,我们可以根据其他服务的图标的写法,来自己添加这个新功能。
如图所示:
系统状态栏要显示的图标,都会在Framework/base/core/res/res/values的两个xml文件里添加图标要显示的位置信息。
config.xml:
arrays.xml里
然后在drawable里添加耳机图片,耳机大小不能超过25*25,否则会出现显示被压缩的。
系统所有的图标控制显示都是在SystemUI的StatusBarPolicy.java文件里
在这里添加服务和广播,监听耳机插拔的事件
然后在初始化StatusBarPolicy里加入服务 public StatusBarPolicy(Context context)
自定义类:
这样就可以在系统状态栏里显示耳机的图标了,当然底层也要有这个广播发送。
如图所示:
系统状态栏要显示的图标,都会在Framework/base/core/res/res/values的两个xml文件里添加图标要显示的位置信息。
config.xml:
<!-- Component to be used as the status bar service. Must implement the IStatusBar interface. This name is in the ComponentName flattened format (package/class) --> <string name="config_statusBarComponent">com.android.systemui/com.android.systemui.statusbar.StatusBarService</string> <!-- Do not translate. Defines the slots for the right-hand side icons. That is to say, the icons in the status bar that are not notifications. --> <string-array name="config_statusBarIcons"> <item><xliff:g id="id">ime</xliff:g></item> <item><xliff:g id="id">sync_failing</xliff:g></item> <item><xliff:g id="id">sync_active</xliff:g></item> <item><xliff:g id="id">gps</xliff:g></item> <item><xliff:g id="id">bluetooth</xliff:g></item> <item><xliff:g id="id">nfc</xliff:g></item> <item><xliff:g id="id">tty</xliff:g></item> <item><xliff:g id="id">speakerphone</xliff:g></item> <!--耳机图标ID --> <item><xliff:g id="id">headset</xliff:g></item> <!-- 耳机图标ID --> <item><xliff:g id="id">mute</xliff:g></item> <item><xliff:g id="id">volume</xliff:g></item> <item><xliff:g id="id">wifi</xliff:g></item> <item><xliff:g id="id">cdma_eri</xliff:g></item> <item><xliff:g id="id">no_sim_card2</xliff:g></item> <item><xliff:g id="id">phone_signal_second_sub</xliff:g></item> <item><xliff:g id="id">data_connection</xliff:g></item> <item><xliff:g id="id">phone_evdo_signal</xliff:g></item> <item><xliff:g id="id">no_sim_card1</xliff:g></item> <item><xliff:g id="id">phone_signal</xliff:g></item> <item><xliff:g id="id">battery</xliff:g></item> <item><xliff:g id="id">alarm_clock</xliff:g></item> <item><xliff:g id="id">secure</xliff:g></item> <item><xliff:g id="id">clock</xliff:g></item> </string-array>
arrays.xml里
<!-- Do not translate. Defines the slots for the right-hand side icons. That is to say, the icons in the status bar that are not notifications. --> <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</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">phone_signal_second_sub</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> <!--耳机图标Id --> <item><xliff:g id="id">headset</xliff:g></item> <!-- 耳机图标Id --> <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>
然后在drawable里添加耳机图片,耳机大小不能超过25*25,否则会出现显示被压缩的。
系统所有的图标控制显示都是在SystemUI的StatusBarPolicy.java文件里
在这里添加服务和广播,监听耳机插拔的事件
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { updateBattery(intent); } else if (action.equals(Intent.ACTION_ALARM_CHANGED)) { updateAlarm(intent); //耳机广播 }else if(action.equals(Intent.ACTION_HEADSET_PLUG)){ updateHeadset(intent); //耳机广播 }else if (action.equals(Intent.ACTION_SYNC_STATE_CHANGED)) { updateSyncState(intent); } else if (action.equals(Intent.ACTION_BATTERY_LOW)) { onBatteryLow(intent); } else if (action.equals(Intent.ACTION_BATTERY_OKAY) || action.equals(Intent.ACTION_POWER_CONNECTED)) { onBatteryOkay(intent); } else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) || action.equals(BluetoothHeadset.ACTION_STATE_CHANGED) || action.equals(BluetoothA2dp.ACTION_SINK_STATE_CHANGED) || action.equals(BluetoothPbap.PBAP_STATE_CHANGED_ACTION)) { updateBluetooth(intent); } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) || action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION) || action.equals(WifiManager.RSSI_CHANGED_ACTION)) { updateWifi(intent); } else if (action.equals(LocationManager.GPS_ENABLED_CHANGE_ACTION) || action.equals(LocationManager.GPS_FIX_CHANGE_ACTION)) { updateGps(intent); } else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) || action.equals(AudioManager.VIBRATE_SETTING_CHANGED_ACTION)) { updateVolume(); } else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) { updateSimState(intent); } else if (action.equals(TtyIntent.TTY_ENABLED_CHANGE_ACTION)) { updateTTY(intent); } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) || action.equals(ConnectivityManager.INET_CONDITION_ACTION)) { // TODO - stop using other means to get wifi/mobile info updateConnectivity(intent); } else if (action.equals(WimaxManagerConstants.WIMAX_ENABLED_STATUS_CHANGED) || action.equals(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION) || action.equals(WimaxManagerConstants.WIMAX_STATE_CHANGED_ACTION)) { updateWiMAX(intent); } } };
然后在初始化StatusBarPolicy里加入服务 public StatusBarPolicy(Context context)
//headset mService.setIcon("headset", R.drawable.stat_sys_headset, 0); mService.setIconVisibility("headset", false);
自定义类:
//耳机图标显示控制 private final void updateHeadset(Intent intent) { final String action = intent.getAction(); if (action.equals(Intent.ACTION_HEADSET_PLUG)) { int state = intent.getIntExtra("state", 0); if (state == 1) { mService.setIconVisibility("headset", true); } else { mService.setIconVisibility("headset", false); } } }
这样就可以在系统状态栏里显示耳机的图标了,当然底层也要有这个广播发送。
相关文章推荐
- 在android系统SystemUI里面添加耳机图标的一点知识
- 在android系统SystemUI里面添加耳机图标的一点知识
- 在android系统SystemUI里面添加耳机图标的一点知识
- Android SystemUI 信号栏后添加信号图标
- Android SystemUI状态栏添加图标
- android实现添加耳机状态图标的方法
- Android SystemUI状态栏添加图标
- 为android添加耳机状态图标
- Android4.0-4.4 添加支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自动识别)
- 为android添加耳机状态图标
- Android Status bar添加耳机图标
- kitkat添加耳机插拔图标
- 为android添加耳机状态图标
- ## ubuntu 14.04 桌面版 桌面图标添加 ##
- Flex4_Tree组件2(添加多选框、修改树图标)
- 在托盘图标中添加气球提示
- iconfont怎么添加新的字体图标?
- 通过QT Creator创建菜单,添加图标和背景图片
- 03、网页标题添加图标
- 添加网站图标