关于systemui wifi图标更新过程分析

本文分析了Android系统UI中WiFi图标更新的过程,从PhoneStatusBar的启动到NetworkController接收广播,再到SignalClusterView的更新。NetworkController作为广播接收者,监听WiFi状态变化,并将更新信息传递给SignalClusterView,实现图标和状态的刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目systemui没有wifi图标,我不知道是在布局还是代码中隐藏了还是没有接收到wifi更新通知,所以看了下wifi图标更新的过程,有些东西可能受水平的局限,分析得不是很到位
首先systemui状态栏的主体在phonestatusbar这个类,在start()中可以看到
mNetworkController = new NetworkController(mContext);
final SignalClusterView signalCluster =(SignalClusterView)mStatusBarView.findViewById(R.id.signal_cluster);
mNetworkController.addSignalCluster(signalCluster);
signalCluster.setNetworkController(mNetworkController);
NetworkController是一个广播接收者,接收信号的改变,包括wifi,手机信号,飞行模式等
而SignalClusterView是一个自定义的布局,实现了SignalCluster接口,用于显示信号图标,在xml文件singal_cluster_view中使用,可以看到此布局下还放了细分的wifi,手机信号等布局,
而singal_cluster_view在布局status_bar中被include,而status_bar又被include在super_status_bar中,而super_status_bar在phonestatusbar中被填充为根布局
mStatusBarWindow = (StatusBarWindowView) View.inflate(context,R.layout.super_status_bar, null);
    
下面具体说下这2个类,首先NetworkController,我们在其构造方法中可以看到注册了这些广播,而且通过context.registerReceiver(this,filter)注册了自己  
 
public NetworkController(Context context) {
...
IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
        filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(ConnectivityManager.INET_CONDITION_ACTION);
        filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
        filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        mWimaxSupported = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_wimaxEnabled);
        if(mWimaxSupported) {
            filter.addAction(WimaxManagerConstants.WIMAX_NETWORK_STATE_CHANGED_ACTION);
            filter.addAction(WimaxManagerConstants.SIGNAL_LEVEL_CHANGED_ACTION);
            filter.addAction(WimaxManagerConstants.NET_4G_STATE_CHANGED_ACTION);
        }
        context.registerReceiver(this, filter);
}
我们来看其方法addSignalCluster
public void addSignalCluster(SignalCluster cluster) {
        mSignalClusters.add(cluster);
        refreshSignalCluster(cluster);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值