Android:一个BroadcastReceiver用于多个广播

时间:2015-04-06 19:35:11

标签: android broadcastreceiver

我想为我的应用程序安装一个BroacastReceiver,因此我希望在BoradcastListener中检测所有广播操作(wifiManger.getResultscan; connectivityManager.getActiveNetworkInfo;以及其他可能)。如何将MainActivity中的BroadcastReceiver与broadcastListner calss连接?

	private void check_wifi_available() {
		WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);



		registerReceiver(new BroadcastReceiver() {

			@Override
			public void onReceive(Context context, Intent intent) {
				WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
				final List<ScanResult> results = wifiManager.getScanResults();
				if (results != null) {
					// list of access points from the last scan
					List<ScanResult> updatedResults = new ArrayList<ScanResult>();
					// pick Wi-Fi access points which begins with these "SV-"
					// characters.
					for (int i = 0; i < results.size(); i++) {
						String ssid = results.get(i).SSID;
						// Pattern p = Pattern.compile("^KD-(4[0-9]{2}|500)$");
						// Matcher m = p.matcher(ssid);
						// if(m.matches()){}else{}
						if (ssid.startsWith("KD")) {

							updatedResults.add(results.get(i));
						}
					}
					if (updatedResults.size() > 0) {
						String a = deliverBestAccessPoint(updatedResults);
						textWifi.setText(a.toString());
					}
				}

			}

		}, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

	public void onReceive(Context context, Intent intent) {

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

		NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();

		boolean isConnected = netInfo != null
				&& netInfo.isConnectedOrConnecting();
		if (isConnected) {
			Toast.makeText(context, "The device is connected to the internet ",
					Toast.LENGTH_SHORT).show();
			Log.i("NET", "connecte" + isConnected);
		} else {
			Toast.makeText(context,
					"Please connect the device to the internet.",
					Toast.LENGTH_SHORT).show();
		}

	}
	

3 个答案:

答案 0 :(得分:1)

首先创建接收器变量

private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
     //Compare intent.getAction() with your required intents
}

然后调用registerReceiver

registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));registerReceiver(receiver, new IntentFilter(other required intent filter constants));

答案 1 :(得分:0)

只需单独创建IntentFilter并添加您想要处理的所有操作:

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("action1");
    intentFilter.addAction("action2");
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // I have this one here to dectect wifi access points (getResultScan)
        }, intentFilter);

答案 2 :(得分:0)

在包名中创建一个新类;

public class DiscoDancer extends BroadcastReceiver {

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

      //check here with, intent.getAction() and macth with your action

       }
    }

在AndroidManifest.xml中

<receiver android:name="DiscoDancer">
      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         <action android:name="android.intent.action.ACTION_BATTERY_LOW">
    //Add all the intents here

      </action>
      </intent-filter>
</receiver>