Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 代码在wifi关闭和3G开启时有效,但在wifi关闭和4G开启时无效_Android_Android Wifi_Network Protocols - Fatal编程技术网

Android 代码在wifi关闭和3G开启时有效,但在wifi关闭和4G开启时无效

Android 代码在wifi关闭和3G开启时有效,但在wifi关闭和4G开启时无效,android,android-wifi,network-protocols,Android,Android Wifi,Network Protocols,我所做的是 我在wifi中播放流媒体,3g也在运行。 我禁用了wifi,流停止,但立即重新启动,因为3g已启用 但当wifi和4g开启时,问题就开始了,那个时候它就不工作了 我添加了一个类似于 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(receiver,in

我所做的是

我在wifi中播放流媒体,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();
            } }
        };

我相信记录额外的内容信息可能有助于确定实际原因。 参考网址:

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

如果这是一个连接,它是从 断开网络连接,则故障转移\u连接为布尔额外 设置为true

如果连接管理器正在尝试连接,则会导致连接丢失 要连接(或已经连接)到另一个网络 新网络的NetworkInfo也作为额外信息传递。这让 广播的任何接收者都知道,他们不必 告诉用户不可能有数据通信。相反 接收者应期待不久的另一次广播,表明 故障转移尝试成功(因此仍然存在总体数据) 或故障转移尝试失败,这意味着 连接已丢失

对于断开连接事件,将设置布尔值extra\u NO\u连接 如果根本没有连接的网络,则为true

常量值:“android.net.conn.CONNECTIVITY\u CHANGE”


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


GetNetworkStatus.isNetworkAvailable()代码公共静态布尔值isNetworkAvailable(上下文上下文){con=Context;ConnectivityManager ConnectivityManager=(ConnectivityManager)con.getSystemService(Context.CONNECTIVITY_服务);NetworkInfo activeNetworkInfo=ConnectivityManager.getActiveNetworkInfo();返回activeNetworkInfo!=null;}
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 "?";
}