1

出于某种原因,我的网络更改接收器不工作,并在我的Android应用程序中向我的NetworkStateReceiver类广播CONNECTIVITY_CHANGE。我已经检查过,看看它是否仅仅是我的对话框的问题,但是应该打印出来的Log.d不是。互联网连接更改广播没有发生

这里是AndroidManifest.xml中的代码:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<receiver android:name="com.main.main.NetworkStateReceiver"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 

这里是NetworkStateReceiver.java代码:

package com.main.main; 

import android.app.AlertDialog; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 

public class NetworkStateReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(final Context context, final Intent intent) { 
    final AlertDialog dialog = new AlertDialog.Builder(context) 
      .setTitle("Connection Failed") 
      .setMessage("Please Check Your Internet Connection") 
      .setPositiveButton("Try Again", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        //Code for try again 
       } 
      }) 
      .setNegativeButton("Exit", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 

       } 
      }).create(); 
    if (intent.getExtras() != null) { 
     final ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     final NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); 
     if (ni != null && ni.isConnectedOrConnecting()) { 
      Log.d("INTERNET_MESSAGE", "Connected to internet"); 
      dialog.dismiss(); 
     } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { 
      Log.d("INTERNET_MESSAGE", "Disconnected from internet"); 
     } 
    } 
} 

}

+2

其中是dialog.show(); ??日志没有显示,因为这两个条件都不是真的,所以在结束时再多加一些,再次检查。 –

+0

@DhawalSodhaParmar好的,我在最后加了一个else和一个日志,并且日志正在打印。你能粘贴一个修改后的if和else if块来确定是否有互联网连接吗? – fedorp1

+0

检查我的答案之一http://stackoverflow.com/a/15546897/1168654 –

回答

2

其更好地检查互联网连接,如下所示:

只是在通用工具类中创建一个通用函数作为

/* 
* A Common function to check internet connection. 
* */ 
public static boolean isOnline(Context c) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

现在,你需要在你的代码如下互联网连接使用它:

 if (isOnline(YourActivity.this)) { 
      //Your Tasks.. 
     } else { 
      //Display your AlertBox.. 
     } 
1

您需要使你的清单中..它会工作接收器..

<receiver android:name="com.main.main.NetworkStateReceiver" 
      android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 
+0

很好的接收...但是'android:enabled'默认是true,只是让android系统实例化接收器。我认为你的意思是'android:exported',它让接收者获得来自应用程序外部的事件(这是OP需要的)。添加到我的答案。 – rothloup

+0

您是否在您的活动生命周期中注册并取消注册您的听众? – user2906641