[英]Is there any way to check if 4g network is stabilized on Android?
我正在制作VoIP客戶端,我想讓客戶端呼叫連接4G時與之通話的最后一個電話號碼。 如果用戶按下“結束通話”按鈕,它不會自動通話。 僅當連接斷開並且用戶無法按結束通話以完成電話通話時才會發生。
因此,我有一個BroadcastReceiver
,它告訴我Internet連接是否可用。 除了它告訴我太多。
我看到的手機的行為是當沒有網絡並且它從4G網絡獲得連接時, BroadcastReceiver
onReceive(..)
方法被觸發了大約8次,其中[已連接,未連接,已連接,未連接,....,連接的]。
這是偵聽連接性的代碼。
@Override
public void onReceive( Context context, Intent intent ) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
NetworkInfo an = cm.getActiveNetworkInfo();
if ( an != null ) {
// this method just decides if it is WIFI or fast network like
// 4G or HSPAP.
state = updateConnectionAvailability(context, an, tm);
// 1: 4G/HSPAP, 3: WIFI
if (state == 1 || state == 3) {
Toast.makeText( context, "Fast network available", Toast.LENGTH_SHORT ).show();
} else {
Toast.makeText( context, "Warning: Slow network available", Toast.LENGTH_SHORT ).show();
}
if (mCCL != null) {
mCCL.onVoipAvailable();
}
} else {
Toast.makeText( context, "There is no Internet connection!", Toast.LENGTH_SHORT).show();
if (mCCL != null) {
mCCL.onVoipNotAvailable();
}
}
}
您可能已經注意到,我創建了一個自定義偵聽器mCCL。 它只是通知與MainActivity的連接。 但是話又說回來,一旦建立4G,就會調用一系列onVoipAvailable()
和onVoipNotAvailable()
。
我的目標是找出4G是否建立良好。 這是很模糊的,但我不能用不同的措詞。 :-(
我該怎么辦?
在我的應用中,我確實避免重復廣播。 但是,我收到的序列是同一網絡的多個“連接”,或同一網絡的多個“斷開”:
public NetworkInfo previous_network = null;
@Override
public void onReceive( Context context, Intent intent ) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
NetworkInfo an = cm.getActiveNetworkInfo();
///AVOID EXTRA BROADCAST
if (previous_network == null && an==null) {
Log.i(mTag, "detected duplicate broadcast - no network");
return;
}
if (previous_network != null && an != null) {
if (an.toString().compareTo(previous_network.toString()) == 0) {
Log.i(mTag, "detected duplicate broadcast - no change");
return;
}
}
previous_network = an;
///END OF AVOID EXTRA BROADCAST
if ( an != null ) {
// this method just decides if it is WIFI or fast network like
// 4G or HSPAP.
state = updateConnectionAvailability(context, an, tm);
// 1: 4G/HSPAP, 3: WIFI
if (state == 1 || state == 3) {
Toast.makeText( context, "Fast network available", Toast.LENGTH_SHORT ).show();
} else {
Toast.makeText( context, "Warning: Slow network available", Toast.LENGTH_SHORT ).show();
}
if (mCCL != null) {
mCCL.onVoipAvailable();
}
} else {
Toast.makeText( context, "There is no Internet connection!", Toast.LENGTH_SHORT).show();
if (mCCL != null) {
mCCL.onVoipNotAvailable();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.