Android 6.0 状态栏信号图标分析

先来一张状态栏的分区图。今天要分析的是信号显示这一小块,就是图中的signal_cluster,对应源码中的View就是SignalClusterView。

这里写图片描述

这是一个自定义View,我们看一下他的定义:

public class SignalClusterView
        extends LinearLayout
        implements NetworkControllerImpl.SignalCallback,
        SecurityController.SecurityControllerCallback, Tunable {
   }

继承了线性布局,实现了三个接口。从接口的名称就知道我们关心的东东肯定在NetworkControllerImpl.SignalCallback里面,(由此可见易懂的名称的重要性!)看看它里面有哪些内容:

public interface SignalCallback {
   
        void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
                boolean activityIn, boolean activityOut, String description);

        void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
                int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
                int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon,
                String typeContentDescription, String description,
                boolean isWide, int subId);
        void setSubs(List<SubscriptionInfo> subs);
        void setNoSims(boolean show);

        void setEthernetIndicators(IconState icon);

        void setIsAirplaneMode(IconState icon);

        void setMobileDataEnabled(boolean enabled);
}

函数名都很直观,就不翻译了,具体的实现后续用到的时候再来分析吧。

SignalClusterView的关于网络信号相关的更新肯定就是依赖于上面列举的几个接口的回调了。

那又是谁在什么情况下会调用这些接口中的回调函数呢?从接口名NetworkControllerImpl.SignalCallback知道应该是NetworkControllerImpl这个类(如果不是这种 类。接口 的形式,就直接全局搜函数名吧)。继续来看这个类的定义:

public class NetworkControllerImpl extends BroadcastReceiver
        implements NetworkController, DemoMode {
   }

看名称NetworkControllerImpl就纯粹是NetworkController的实现类,但它继承了广播接收器,那我们就要看看它到底处理哪些广播:

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.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
        filter.addAction(TelephonyIntents.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED);
        filter.addAction(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);
        filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值