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>();
我有单独的 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>();