修改状态栏(StatusBar)图标(icon)(定制自己的状态栏)
16lz
2021-01-26
系统定制需要修改一下状态栏,如果想要刷机的话,网上资料挺多的,但是修改源代码的资料不多,在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/package里面的SystemUI里面。
在StatusBarPolicy中,添加图标的代码如下(404行):
[java] view plain copy
- publicStatusBarPolicy(Contextcontext){
- mContext=context;
- mService=(StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);
- mSignalStrength=newSignalStrength();
- mBatteryStats=BatteryStatsService.getService();
- //storage
- mStorageManager=(StorageManager)context.getSystemService(Context.STORAGE_SERVICE);
- mStorageManager.registerListener(
- newcom.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);
- //registerforphonestatenotifications.
- ((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);
- //wifiwillgetupdatedbythestickyintents
- //TTYstatus
- mService.setIcon("tty",R.drawable.stat_sys_tty_mode,0);
- mService.setIconVisibility("tty",false);
- //CdmaRoamingIndicator,ERI
- mService.setIcon("cdma_eri",R.drawable.stat_sys_roaming_cdma_0,0);
- mService.setIconVisibility("cdma_eri",false);
- //bluetoothstatus
- mService.setIcon("bluetooth",R.drawable.stat_sys_data_bluetooth,0);
- BluetoothAdapteradapter=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);
- //Gpsstatus
- mService.setIcon("gps",R.drawable.stat_sys_gps_acquiring_anim,0);
- mService.setIconVisibility("gps",false);
- //Alarmclock
- mService.setIcon("alarm_clock",R.drawable.stat_notify_alarm,0);
- mService.setIconVisibility("alarm_clock",false);
- //Syncstate
- 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();
- IntentFilterfilter=newIntentFilter();
- //RegisterforIntentbroadcastsfor...
- 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);
- //loadconfigtodetermineiftodistinguishHspadataicon
- try{
- mHspaDataDistinguishable=mContext.getResources().getBoolean(
- R.bool.config_hspa_data_distinguishable);
- }catch(Exceptione){
- mHspaDataDistinguishable=false;
- }
- }
下面简单说一下用法,获取StatusBarManager:
private final StatusBarManager mService;
- mService=(StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);
- <spanstyle="font-size:14px;">下面是获得图标:获取以后处理</span>
- //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里面找一下相应的文件,今天就写到这,其余信息,继续补充。
更多相关文章
- android图标大小规范
- 用qt编译Android应用(windows和Linux)
- Android(安卓)2.3 GingerBread for VirtualBox x86编译指南
- AS插件之Android(安卓)Drawable Importer
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin
- Android(安卓)Hook框架Xposed详解:从源代码分析到开发指南
- Android(安卓)ART dex2oat 浅析
- Android(安卓)重新编译资源文件
- Ubuntu 下 Android(安卓)反编译 apk