2015-10-09 82 views
0

我正在製作一個VoIP客戶端,我想讓客戶端撥打上次連接4G時所說的電話號碼。如果用戶按下「結束呼叫」按鈕,它不會自動呼叫。它只發生在連接斷開的情況下,用戶不能按結束通話完成通話。有什麼辦法來檢查4g網絡是否穩定在Android上?

所以我有一個BroadcastReceiver它告訴我,如果互聯網連接可用或不太好。 除了它告訴我太多。

手機的,我看到的行爲時,有沒有網絡和它從4G網絡的連通性,在BroadcastReceiveronReceive(..)方法引發約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是否建立得相當好。它非常含糊,但我不能以不同的方式說出來。 :-(

我應該怎麼辦?

回答

0

在我的應用程序,我這樣做避免重複播出。不過,我收到序列數爲同爲同一個網絡「連接」,或幾個「斷開」網絡:

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(); 
     } 
    } 
} 
+0

我肯定會試試這個,當我有機會,會確保給予反饋非常感謝您 –

+0

它有些工作在某些方面,但它並不完美但是,我知道我們的情況下!可以有所不同,所以我會選擇這個答案:3謝謝! –

相關問題