无线关闭和3G开启时代码工作,但无线wifi和4G时代码工作

时间:2015-02-12 12:30:30

标签: android android-wifi network-protocols

我所做的是

我正在播放无线网络流,3g也开启了。 我禁用了wifi,流停止但是重新启动导致3g启用。

但是当wifi和4g打开时,问题就开始了,那个时候它无法正常工作

我添加了像

这样的听众
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(receiver,intentFilter) ;   

接收者是

BroadcastReceiver receiver = new BroadcastReceiver() {
          @Override
          public void onReceive(Context context, Intent intent) {



            try{  {
                if(GetNetworkStatus.isNetworkAvailable(getApplicationContext()))
                   {if(!mIsPlaying)
                    justPlay();

                   }
                else
                {justStop();

                 handler=new Handler();

                    r = new Runnable()
                    {
                        public void run() 
                        {

                            try{
                                Thread.sleep(4000);
                                }
                                catch(Exception s)
                                {}
                            if(GetNetworkStatus.isNetworkAvailable(getApplicationContext()))
                            justPlay();
                            /*if(!mIsPlaying)
                            handler.postDelayed(this, 3000);*/
                        }
                    };
                    try{
                         handler.postDelayed(r, 1000);

                     }
                     catch(Exception e)
                     {

                     }

                Toast.makeText(getApplicationContext(), "Internet Connection Failed", Toast.LENGTH_LONG).show();
                }
            }
            }
            catch(Exception e)
            {
                finish();
            } }
        };

1 个答案:

答案 0 :(得分:1)

我相信记录 Extra 内容信息可能有助于您确定实际原因。 参考网址:http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION

  

发生了网络连接的变化。默认连接   已经建立或丢失。受影响的NetworkInfo   网络作为额外发送;应该咨询一下,看看是什么样的   发生连通事件。

     

如果这是从a故障转移的结果   断开网络,然后FAILOVER_CONNECTION布尔额外是   设置为true。

     

如果连接管理器正在尝试连接丢失   连接(或已经连接)到另一个网络,   新网络的NetworkInfo也作为额外传递。这让我们   广播的任何接收者都知道他们不一定   告诉用户没有数据流量可行。相反,   接收器应该很快就会有另一个广播,这表明要么   故障转移尝试成功(因此仍然存在整体数据   连接),或故障转移尝试失败,意味着所有   连接已经丢失。

     

对于断开事件,设置了布尔额外的EXTRA_NO_CONNECTIVITY   如果根本没有连接的网络,则为true。

     

常量值:" android.net.conn.CONNECTIVITY_CHANGE"

在您的GetNetworkStatus.isNetworkAvailable()中,您是否正确检查了LTE连接类型? 您可以使用以下方法(从其他地方收集,但效果很好)

public static String getNetworkClass(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    if(info==null || !info.isConnected())
        return "-"; //not connected
    if(info.getType() == ConnectivityManager.TYPE_WIFI)
        return "WIFI";
    if(info.getType() == ConnectivityManager.TYPE_MOBILE){
        int networkType = info.getSubtype();
        switch (networkType) {
            case TelephonyManager.NETWORK_TYPE_GPRS:
            case TelephonyManager.NETWORK_TYPE_EDGE:
            case TelephonyManager.NETWORK_TYPE_CDMA:
            case TelephonyManager.NETWORK_TYPE_1xRTT:
            case TelephonyManager.NETWORK_TYPE_IDEN:
                return "2G";
            case TelephonyManager.NETWORK_TYPE_UMTS:
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
            case TelephonyManager.NETWORK_TYPE_HSDPA:
            case TelephonyManager.NETWORK_TYPE_HSUPA:
            case TelephonyManager.NETWORK_TYPE_HSPA:
            case TelephonyManager.NETWORK_TYPE_EVDO_B:
            case TelephonyManager.NETWORK_TYPE_EHRPD:
            case TelephonyManager.NETWORK_TYPE_HSPAP:
                return "3G";
            case TelephonyManager.NETWORK_TYPE_LTE:
                return "4G";
            default:
                return "?";
         }
    }
    return "?";
}