Android 数据信号更新流程

    手机在Statusbar 上,会有个信号塔的图标。该图标是标识当前手机信号的强度(通常是voice的信号强度)。此图标会根据当前设备所收到的信号强度来对应的显示不同的资源图标,就是通常说的信号格数。这个信号值是一直变化的,那么图标也是实时更新的。在此总结下信号图标更新的流程。

1.信号图标的显示

    1.1 处理上报消息

   在ServiceStateTracker.java的构造函数里可以看到,在初始化ServiceStateTracker时,有向Ril监听EVENT_SIGNAL_STRENGTH_UPDATE的消息,那么当modem上报信号变化更新时,在ServiceStateTracker会去处理这个消息。这里关于注册消息的处理,不熟悉的可以查看 Android 基础篇 -- Registrant 

    

xref: /frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java

    /**
     * Registrant a message on Ril
     * You can check setOnSignalStrengthUpdate on RIL.java
     */
    public ServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci) {
        ...
        mCi.setOnSignalStrengthUpdate(this, EVENT_SIGNAL_STRENGTH_UPDATE, null);
        ...
    }


    /**
     * send signal-strength-changed notification if changed Called both for
     * solicited and unsolicited signal strength updates
     *
     * @return true if the signal strength changed and a notification was sent.
     */
    protected boolean onSignalStrengthResult(AsyncResult ar) {
        boolean isGsm = false;
        int dataRat = mSS.getRilDataRadioTechnology();
        int voiceRat = mSS.getRilVoiceRadioTechnology();

        ...

        boolean ssChanged = notifySignalStrength();

        return ssChanged;
    }



    /**
     * Notify all SignalStrength Registrants about SignalStrength update
     * 
     */
    protected boolean notifySignalStrength() {
        boolean notified = false;
        if (!mSignalStrength.equals(mLastSignalStrength)) {
            try {
                mPhone.notifySignalStrength();
                notified = true;
            } catch (NullPointerException ex) {
                loge("updateSignalStrength() Phone already destroyed: " + ex
                        + "SignalStrength not notified");
            }
        }
        return notified;
    }

当ServiceStateTracker处理完上报的消息后,可以看到是通知所有注册该监听的对象。

 

   1.2 数据传递

  在ServiceStateTracker通知注册监听对象后,会通过一系列通知 & aidl 进行数据传递,一直传递到MobileSignalController.这块没有太多的逻辑,大概传递方向是:ServiceStateTracker # notifySignalStrength --> Phone # notifySignalStrength  --> DefaultPhoneNotifier # notifySign

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值