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