2013-12-11 42 views
1

我在我的活動中使用廣播接收器來檢查互聯網是否連接,如果它連接,那麼它應該發出一個http請求,否則顯示一個警告對話框,說沒有互聯網連接,它是工作正常。廣播接收器完成應用程序

問題我的整個應用程序使用互聯網連接,所有的活動。我應該如何使廣播接收器可用通過應用程序。

Broadcast Receiver class


private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
     String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
     boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

     currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

     if(currentNetworkInfo.isConnected()) 
     { 

      Toast.makeText(getApplicationContext(), "Internet Connected", Toast.LENGTH_LONG).show(); 

     } 
     else 
     { 

      Toast.makeText(getApplicationContext(), "Internet Not Connected", Toast.LENGTH_LONG).show(); 

     } 
    } 
}; 



onCreate

this.registerReceiver(this.mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
+1

你想在用戶連接到互聯網時得到通知,或者你想檢查他是否連接(你不需要BroadcastReceiver)? – RvdK

+0

你可以有一個抽象的活動,它實現了Braodcardreceiver,並將活動範圍擴展到其他活動 –

+0

@RvdK我的整個應用程序主要在web服務(json)的幫助下工作在互聯網上,所以我希望用戶在連接丟失 –

回答

1

製作接收機:

<receiver android:name=".NetReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 
+0

非常感謝你...工作就像一個魅力... 但是當我嘗試打開活動它強制關閉bcoz的http請求.. 只有當http請求互聯網連接...我應該如何修改其他部分? –

+0

使應用程序類具有一個用於存儲Internet連接值的變量。然後從廣播接收器設置值,如果互聯網連接..然後當你提出http請求時,首先檢查該變量的值.. – Riser

+0

任何示例或代碼..會非常有幫助嗎? –

1
ConnectivityManager connMgr = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // connected to internet 
    } else { 
     // no internet 
    } 
0

如果你只需要檢查,如果用戶連接到互聯網,然後檢查

 ConnectivityManager conMgr = (ConnectivityManager)     
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     // ARE WE CONNECTED TO THE NET 

     if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

,然後再開始一個Http request.You並不需要註冊一個BroadcastReceiver。對於

2

我建議你:如果你在上面,然後加入檢查這個代碼在AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

public class NetReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 


     ConnectivityManager connectivityManager = (ConnectivityManager) 
            context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); 
     if (isConnected)  
      //Nothing 
     else 
      Toast.makeText(context, "Not Connected", Toast.LENGTH_LONG).show(); 
    } 
} 

現在加入這個將接收器提取到頂級課程中,將其安裝在所有入口點(每個活動用戶都可以開始課程)你的應用程序)。然後使用單身設置對象來保持狀態,所有的活動都可以簡單地訪問這個設置對象來檢查連接。

由於所有的活動都需要它,甚至需要在連接變化時得到通知,所以您可以定義一個包含所有連接處理邏輯的基本活動,並讓所有其他活動繼承它。