首页 > Android > Android中的3G图标与PS数据流向方向

Android中的3G图标与PS数据流向方向

2011-12-23 18:21 星期五    浏览: 3,118    绿 发表评论 阅读评论

3G图标与PS数据流向方向

从上往下跟代码:
-----------
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java:1194: case TelephonyManager.DATA_ACTIVITY_IN:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java:1200: case TelephonyManager.DATA_ACTIVITY_INOUT:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java:1219: case TelephonyManager.DATA_ACTIVITY_IN:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java:1225: case TelephonyManager.DATA_ACTIVITY_INOUT:

3G数据业务图标由frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java的updateDataIcon函数中更新。
private final void updateDataIcon() {
int iconId;
boolean visible = true;

if (!isCdma()) {
// GSM case, we have to check also the sim state
if (mSimState == IccCard.State.READY || mSimState == IccCard.State.UNKNOWN) {
if (hasService() && mDataState == TelephonyManager.DATA_CONNECTED) {
switch (mDataActivity) {
case TelephonyManager.DATA_ACTIVITY_IN:
iconId = mDataIconList[1];
break;
case TelephonyManager.DATA_ACTIVITY_OUT:
iconId = mDataIconList[2];
break;
case TelephonyManager.DATA_ACTIVITY_INOUT:
iconId = mDataIconList[3];
break;
default:
iconId = mDataIconList[0];
break;
}
mService.setIcon(“data_connection”, iconId, 0);
} else {

当数据连接状态变化,如不在连接状态时(即PhoneStateListener的onDataConnectionStateChanged监听到),则也在updateDataIcon中将图标的visibility属性设置为false,即隐藏它。

当PhoneStateListener监听到:onServiceStateChanged、onDataConnectionStateChanged、onDataActivity变化时更新图标
或当sim卡状态变化updateSimState,也需更新;
或当ConnectivityManager监听到状态变化时需更新。

DefaultPhoneNotifier的负责通知状态变化,如notifyServiceState、notifyDataActivity
新的状态则由Phone或其子类获取:
sender.getDataActivityState()//sender即为phone或其子类
同时需要将内部状态转换为外部状态,如:Phone.DataActivityState.DATAIN->TelephonyManager.DATA_ACTIVITY_IN.

GSMPhone的数据方向函数由DataConnectionTracker的getActivity()得到(实际返回的值在GsmDataConnectionTracker中修改更新):
public DataActivityState getDataActivityState() {
DataActivityState ret = DataActivityState.NONE;

if (mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE) {
switch (mDataConnection.getActivity()) {
case DATAIN:
ret = DataActivityState.DATAIN;
break;

case DATAOUT:
ret = DataActivityState.DATAOUT;
break;

case DATAINANDOUT:
ret = DataActivityState.DATAINANDOUT;
break;
}
}

return ret;

从中间往上和下跟:
==================
在GsmDataConnectionTracker中的Runnable中修改变量activity这个方向值,然后调用Phone的notifyDataActivity发出通知,从而实际调用到PhoneBase,然后继而调用到DefaultPhoneNotifier,继而调用到ITelephonyRegistry,从而引起PhoneStateListener的动作,然后去从phone中获取新数据方向的值,也就是从DataConnectionTracker到GsmDataConnectionTracker中获取数据方向。
private Runnable mPollNetStat = new Runnable()

在Runnable中,使用流量统计TrafficStats变化去判断数据流向方向。
frameworks/base/core/java/android/net/TrafficStats.java
然后到jni层:
frameworks/base/core/jni/android_net_TrafficStats.cpp

通过尝试读出文件来判断:
“/sys/class/net/rmnet0/statistics/tx_packets”,
“/sys/class/net/ppp0/statistics/tx_packets”

“/sys/class/net/rmnet0/statistics/rx_packets”,
“/sys/class/net/ppp0/statistics/rx_packets”

本文链接地址: http://blog.redwolf-soft.com/?p=1243

原创文章,版权©红狼博客所有, 转载随意,但请注明出处。

    分享到:

相关文章:

  • 无相关文章
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
订阅评论
  欢迎参与讨论,请在这里发表您的看法、交流您的观点。