我希望在给定的时间内记录3G或2G上Android手机的分组数据会话数。
我希望 PhoneStateListeners 中的 TelephonyManager.DATA_DISCONNECTED 事件对应于数据sesion的结束,但它没有,因为我的运营商向我收取会话费用(多次DATA_DISCONNECTED事件后,数据使用后的popUp消息)。
答案 0 :(得分:0)
您需要使用BroadcastReceiver
来监听数据断开事件或数据连接事件。
首先,您需要在AndroidManifest.xml
中添加接收器。
<receiver
android:name=".Networkconncted"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
接下来,您需要创建一个扩展BroadcastReceiver
的类,在连接/断开数据时将调用此类。
public class Networkconncted extends BroadcastReceiver {
public static final String key = "networkInfo";
public static final String disconnected = "DISCONNECTED";
public static final String MOB_INT = "mobile";
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
String value = extras.get(key).toString();
Log.v("netappcheck", value);
String temp[] = value.split(",");
if (temp[0].toLowerCase().contains(MOB_INT)) //check if mobile n/w
if (temp[1].contains(disconnected)) {
Toast.makeText(context,"data disconnected",Toast.LENGTH_SHORT).show();
//do something when data is disconnected
} else {
Toast.makeText(context,"data connected",Toast.LENGTH_SHORT).show();
//do something when data is connected
}
}
}
}
当调用broadcastreceiver时,intent.getExtras().get(key)
将返回以下值:
[type: MOBILE[EDGE], state: DISCONNECTED/DISCONNECTED,
reason: (unspecified), extra: airtelgprs.com, roaming: false,
failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
类型字段提到网络类型已连接,当连接/ disconected时,wifi类型将返回WIFI[]
,当连接到移动网络(3G,EDGE等)时,类型字段将返回MOBILE[]
。
状态字段提到连接状态。
变量temp []将类型置于第0位,状态位于第1位。我们需要检查其MOBILE
是否位于第0位,因为我们只需跟踪移动网络连接。然后检查第1位的状态。
我在Android 5.0.1和Android 4.0.4中测试过它运行正常。 更多信息here