安卓系统:一个用于多个广播的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();
		}
	}
	

首先创建接收器变量

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

然后调用寄存器接收器

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

只需单独创建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);

在包名称中创建一个新类;

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>

最新更新