2015-10-09 110 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谢谢! –

相关问题