Android:将带有 Intent 的 scanResult 列表从 onReceive 传递到 MainActivity

Android: pass List of scanResult wit Intent from onReceive to the MainActivity

我有单独的 BroadcastReceiverListener,我想将 "List ScanResult updatedResults = new ArrayList ScanResult; from the onReceive() in the seprate "BroadcastReceiverListener " class 和 Intent 传递给 MainActivity。我如何使用 putExtra 做到这一点?

感谢任何帮助。

public class BroadcastReceiverListener extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(
                android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {

            WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            if (!wifi.isWifiEnabled()) {
                Toast.makeText(context, "Please turn your Wi-Fi on",
                        Toast.LENGTH_SHORT).show();
                // if (wifi.getWifiState() !=
                // WifiManager.WIFI_STATE_ENABLING) {
                // wifi.setWifiEnabled(true);
                // }

            }

            WifiManager wifi = (WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);

            WifiManager wifiManager = (WifiManager) context
                    .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));

                    }
                }

                Intent updateIntenet = new Intent(context, MainActivity.class);

                updateIntenet.putParcelableArrayListExtra("broadcast_event",
                        updatedResults);
                context.startActivity(intent);

            }

        }
      }
  }

MainActivity 中的 onNewIntent 方法:

     @Override
     protected void onNewIntent(Intent intent) {
         String intentResult = intent.getStringExtra("broadcast_event");
         if (intentResult != null) {
   //here I am getting the error: The method getParcelableArrayList(String) is undefined for the type MainActivity
             List<ScanResult> results = getParcelableArrayList(intentResult);
             String a = deliverBestAccessPoint(results);
             textWifi.setText(a.toString());
         } else {
             textWifi.setText("No route is available.");
         }
     }

由于 ScanResult 实现了 Parcelable,您只需更改:

// list of access points from the last scan
Lst<ScanResult> updatedResults = new ArrayList<ScanResult>();

收件人:

// list of access points from the last scan
ArrayList<ScanResult> updatedResults = new ArrayList<ScanResult>();