修改状态栏(StatusBar)图标(icon)(定制自己的状态栏)

系统定制需要修改一下状态栏,如果想要刷机的话,网上资料挺多的,但是修改源代码的资料不多,在2.2中,源代码在frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java和frameworks/base/services/java/com/android/server/status/StatusBarService.java中,在2.3中,源代码在:frameworks/base/base/package里面的SystemUI里面。

在StatusBarPolicy中,添加图标的代码如下(404行):

public StatusBarPolicy(Context context) { mContext = context; mService = (StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE); mSignalStrength = new SignalStrength(); mBatteryStats = BatteryStatsService.getService(); // storage mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); mStorageManager.registerListener( new com.android.systemui.usb.StorageNotification(context)); // battery mService.setIcon("battery", com.android.internal.R.drawable.stat_sys_battery_unknown, 0); // phone_signal mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); mPhoneSignalIconId = R.drawable.stat_sys_signal_null; mService.setIcon("phone_signal", mPhoneSignalIconId, 0); mService.setIconVisibility("phone_signal",false); // register for phone state notifications. ((TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE)) .listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | PhoneStateListener.LISTEN_DATA_ACTIVITY); // data_connection mService.setIcon("data_connection", R.drawable.stat_sys_data_connected_g, 0); mService.setIconVisibility("data_connection", false); // wifi mService.setIcon("wifi", sWifiSignalImages[0][0], 0); mService.setIconVisibility("wifi", false); // wifi will get updated by the sticky intents // TTY status mService.setIcon("tty", R.drawable.stat_sys_tty_mode, 0); mService.setIconVisibility("tty", false); // Cdma Roaming Indicator, ERI mService.setIcon("cdma_eri", R.drawable.stat_sys_roaming_cdma_0, 0); mService.setIconVisibility("cdma_eri", false); // bluetooth status mService.setIcon("bluetooth", R.drawable.stat_sys_data_bluetooth, 0); BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); if (adapter != null) { mBluetoothEnabled = adapter.isEnabled(); } else { mBluetoothEnabled = false; } mBluetoothA2dpConnected = false; mBluetoothHeadsetState = BluetoothHeadset.STATE_DISCONNECTED; mBluetoothPbapState = BluetoothPbap.STATE_DISCONNECTED; mService.setIconVisibility("bluetooth", mBluetoothEnabled); // Gps status mService.setIcon("gps", R.drawable.stat_sys_gps_acquiring_anim, 0); mService.setIconVisibility("gps", false); // Alarm clock mService.setIcon("alarm_clock", R.drawable.stat_notify_alarm, 0); mService.setIconVisibility("alarm_clock", false); // Sync state mService.setIcon("sync_active", com.android.internal.R.drawable.stat_notify_sync_anim0, 0); mService.setIcon("sync_failing", com.android.internal.R.drawable.stat_notify_sync_error, 0); mService.setIconVisibility("sync_active", false); mService.setIconVisibility("sync_failing", false); // volume mService.setIcon("volume", R.drawable.stat_sys_ringer_silent, 0); mService.setIconVisibility("volume", false); updateVolume(); IntentFilter filter = new IntentFilter(); // Register for Intent broadcasts for... filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Intent.ACTION_BATTERY_LOW); filter.addAction(Intent.ACTION_BATTERY_OKAY); filter.addAction(Intent.ACTION_POWER_CONNECTED); filter.addAction(Intent.ACTION_ALARM_CHANGED); filter.addAction(Intent.ACTION_SYNC_STATE_CHANGED); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.VIBRATE_SETTING_CHANGED_ACTION); filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); filter.addAction(BluetoothHeadset.ACTION_STATE_CHANGED); filter.addAction(BluetoothA2dp.ACTION_SINK_STATE_CHANGED); filter.addAction(BluetoothPbap.PBAP_STATE_CHANGED_ACTION); filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); filter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); filter.addAction(WifiManager.RSSI_CHANGED_ACTION); filter.addAction(LocationManager.GPS_ENABLED_CHANGE_ACTION); filter.addAction(LocationManager.GPS_FIX_CHANGE_ACTION); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); filter.addAction(TtyIntent.TTY_ENABLED_CHANGE_ACTION); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(ConnectivityManager.INET_CONDITION_ACTION); mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); // load config to determine if to distinguish Hspa data icon try { mHspaDataDistinguishable = mContext.getResources().getBoolean( R.bool.config_hspa_data_distinguishable); } catch (Exception e) { mHspaDataDistinguishable = false; } }

下面简单说一下用法,获取StatusBarManager

private final StatusBarManager mService;

mService = (StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);      
 
  



下面是获得图标:获取以后处理

// phone_signal mPhone = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); mPhoneSignalIconId = R.drawable.stat_sys_signal_null; mService.setIcon("phone_signal", mPhoneSignalIconId, 0); mService.setIconVisibility("phone_signal",false);在这里,我把这个信号图标给隐藏了,所以当你编译编译源码,生成自己SDK,然后新建一个模拟器,就会发现信号图标已经没有了,如果你想改变布局,或者更改图标,在res里面找一下相应的文件,今天就写到这,其余信息,继续补充。

你可能感兴趣的:(修改状态栏(StatusBar)图标(icon)(定制自己的状态栏))