Android 代码在wifi关闭和3G开启时有效,但在wifi关闭和4G开启时无效
我所做的是 我在wifi中播放流媒体,3g也在运行。 我禁用了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
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 "?";
}