2017-10-17 85 views
-2

我是Android的初學者。我只想知道什麼是廣播接收器(如果可能的話,有一個例子),它是onReceive()方法。以及我們如何使用該接收器來檢查互聯網連接。廣播接收機檢查互聯網連接

因此,我應該使用相同的方式來檢查互聯網連接,或者只是在Main類中創建一個靜態方法並在其他類中訪問它?

回答

1

好吧,所以我不是最好的程序員,但這應該工作。

這是一個片段,但您應該很容易就能夠將其更改爲 活動。

首先要3個變量:

Context _mContext; 
BroadcastReceiver br = null; 
IntentFilter filter; 
在你的onCreate

()粘貼:

BroadcastReceiver br = new MyBroadCastReceiver(); 
IntentFilter filter = new IntentFilter(); 
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
_mContext = getActivity().getApplicationContext() 
_mContext.registerReceiver(br, filter); 

這個您註冊片段的廣播接收器類MyBroadCastReceiver。

現在做一個MyBroadCastReceiver類並粘貼此:

public class MyBroadCastReceiver extends BroadcastReceiver { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 
         WifiManager.WIFI_STATE_UNKNOWN); 

    switch(extraWifiState) { 
     case: WifiManager.WIFI_STATE_DISABLED: 
     //do something 
     break; 
     case WifiManager.WIFI_STATE_ENABLED: 
     //do something 
     break; 
     case: WifiManager.WIFI_STATE_ENABLING: 
     //do something 
     break; 
     case: WifiManager.WIFI_STATE_DISABLING: 
     //do something 
     break; 
     case: WifiManager.WIFI_STATE_UNKNOWN: 
     //do something with data if you desire so, I found it unreliable until now so i've done nothing with it 
     } 
     } 
    }` 

回到你的片段,並在底部粘貼的地方:

@Override 
    public void onPause() { 
     try { 
      if (br == null) { 
       Log.d("Receiver", "Can't unregister a receiver which was never registered"); 
      } else { 
       getActivity().getApplicationContext().unregisterReceiver(br); 
       br = null; 
      } 
     } catch(Exception err) { 
      Log.e(err.getClass().getName(), err.getMessage(), err); 
      Log.e("Receiver not registered", "Couldn't get context"); 
     } 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     if(br != null) { 
      Log.d("Receiver", "Can't register receiver which already has been registered"); 
     } else { 
      try { 
       br = new MyBroadCastReceiver(); 
       filter = new IntentFilter(); 
       filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
       filter.addAction(CONNECTIVITY_SERVICE); 
       _mContext = getActivity().getApplicationContext(); 
       _mContext.registerReceiver(br, filter); 
      } catch(Exception err) { 
       Log.e(err.getClass().getName(), err.getMessage(), err); 
      } 
     } 
     super.onResume(); 
    } 

你應該能夠調用註冊/註銷在任何地方播放。 我希望這是足夠

0
<receiver 
     android:name=".InternetConnectorBroadcastReceiver" 
     android:enabled="true"> 
     <intent-filter> 

      <!-- Intent filters for broadcast receiver --> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
      <action android:name="android.net.wifi.STATE_CHANGE" /> 
     </intent-filter> 
    </receiver> 


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

public class InternetConnectionBroadcastReceiver extends BroadcastReceiver { 
     public InternetConnectorBroadcastReceiver() { 
     } 

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

}