簡體   English   中英

有什么方法可以檢查4g網絡在Android上是否穩定嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM