通知Status Bar更新有2种方式分别是Status Bar注册PhoneStateListener 和 Dctracker在建立数据业务后发送广播出去.

1.StatusBar注册过程.

在MobileSignalController里面调用registerListner注册如下事件:

/**

* Start listening for phone state changes.

*/

public void registerListener() {

mPhone.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
| PhoneStateListener.LISTEN_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY
| PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE);

}

在建立好数据业务后,通过下面的方法来回调,如果要通过下面的方法来实现那么上层在实现的时候就要注册LISTEN_PRECISE_DATA_CONNECTION_STATE,----------------->很奇怪源码并没有注册该事件.!!!但是其他方案是有注册该事件的.

for (Record r : mRecords) {

if (r.matchPhoneStateListenerEvent(

PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE)) {

    try {

                       r.callback.onPreciseDataConnectionStateChanged(mPreciseDataConnectionState);

    } catch (RemoteException ex) {

        mRemoveList.add(r.binder);

    }

}

}

其他的方法就是发送广播给APP就行处理,

broadcastDataConnectionStateChanged(state, isDataConnectivityPossible, reason, apn,apnType, linkProperties, networkCapabilities, roaming, subId);

broadcastPreciseDataConnectionStateChanged(state, networkType, apnType, apn, reason,linkProperties, "");

总结,当然无论哪种方法通知app,都要携带networkType,这样上层才知道显示哪种图标.

results matching ""

    No results matching ""