Android:将扫描结果列表从onReceive传递到MainActivity
我有seprate BroadcastReceiverListener,我想将seprate“BroadcastReceiverListener”类中的onReceive()中的“List ScanResult updatedResults=new ArrayList ScanResult;传递给MainActivity。如何使用putExtra实现这一点 谢谢你的帮助Android:将扫描结果列表从onReceive传递到MainActivity,android,android-intent,Android,Android Intent,我有seprate BroadcastReceiverListener,我想将seprate“BroadcastReceiverListener”类中的onReceive()中的“List ScanResult updatedResults=new ArrayList ScanResult;传递给MainActivity。如何使用putExtra实现这一点 谢谢你的帮助 public class BroadcastReceiverListener extends BroadcastReceive
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);
}
}
}
}
公共类BroadcastReceiverListener扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
如果(intent.getAction()等于(
android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)){
WifiManager wifi=(WifiManager)getSystemService(Context.wifi\u SERVICE);
如果(!wifi.isWifiEnabled()){
Toast.makeText(上下文,“请打开Wi-Fi”,
吐司。长度(短)。show();
//如果(wifi.getWifiState()=
//WifiManager.WIFI_状态_启用){
//wifi.setWifiEnabled(true);
// }
}
WifiManager wifi=(WifiManager)上下文
.getSystemService(Context.WIFI_服务);
WifiManager WifiManager=(WifiManager)上下文
.getSystemService(Context.WIFI_服务);
最终列表结果=wifiManager.getScanResults();
如果(结果!=null){
//上次扫描的访问点列表
List updatedResults=new ArrayList();
//选择以这些“SV-”开头的Wi-Fi接入点
//人物。
对于(int i=0;i
MainActivity中的onneWinEvent方法:
@覆盖
受保护的void onNewIntent(意图){
String intentResult=intent.getStringExtra(“广播事件”);
if(intentResult!=null){
//这里我得到了一个错误:类型MainActivity的getParcelableArrayList(String)方法未定义
列表结果=getParcelableArrayList(intentResult);
字符串a=deliverBestAccessPoint(结果);
text wifi.setText(a.toString());
}否则{
text wifi.setText(“没有可用的路由”);
}
}
由于ScanResult实现了可包裹,您只需从以下位置进行更改:
// list of access points from the last scan
Lst<ScanResult> updatedResults = new ArrayList<ScanResult>();
//上次扫描的访问点列表
Lst updatedResults=new ArrayList();
致:
//上次扫描的访问点列表
ArrayList updatedResults=新的ArrayList();
您使用的是哪种arraylist?String,Integer…??List updatedResults=new arraylist()。ScanResultDoes ScanResult实现可包裹接口?ScanResult是可包裹的在我的情况下,我必须在继承的方法“writeParcel()”中写些什么,我应该在“onNewIntent()中写些什么“在另一侧的主活动中?您根本不需要调用writeParcel。只需使用您当前的代码。当您在活动中收到意图时,只需使用getParcelableArrayList即可。我在MainActivity中收到错误“类型MainActivity的方法getParcelableArrayList(字符串)未定义”。请看我更新的问题代码。这是一个意图对象的方法
// list of access points from the last scan
ArrayList<ScanResult> updatedResults = new ArrayList<ScanResult>();