[英]How to Detect the End of Mobile Data Session on Android Phones
我希望記錄給定時間內3G或2G上的Android手機具有的分組數據會話數。
我希望PhoneStateListeners中的TelephonyManager.DATA_DISCONNECTED事件與數據會話的結束相對應,但是不希望如此,因為我的操作員向我收取了多個DATA_DISCONNECTED事件后的會話( 數據使用后彈出消息 )的費用。
您需要使用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
}
}
}
}
調用廣播接收器時, intent.getExtras().get(key)
將返回以下值:
[type: MOBILE[EDGE], state: DISCONNECTED/DISCONNECTED,
reason: (unspecified), extra: airtelgprs.com, roaming: false,
failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
類型字段表示連接的網絡類型,當連接/斷開連接的wifi類型將返回WIFI[]
,當連接到移動網絡(3G,EDGE等)時,類型字段將返回MOBILE[]
。
狀態字段提到連接狀態。
變量temp []將類型置於第0位,狀態置於第1位。 我們需要檢查其MOBILE
在第0位,因為我們只需要跟蹤移動網絡的連通性即可。然后檢查第1位的狀態。
我在Android 5.0.1和Android 4.0.4中對其進行了測試,效果很好。 更多信息在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.