通知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,这样上层才知道显示哪种图标.