2017-10-17 126 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) { 
     } 

}