BroadcastReceiver onReceive()没有被调用

该博客讨论了一个在Android应用中遇到的问题,即BroadcastReceiver的onReceive方法没有被调用。作者在Activity中启动Service,Service扫描WiFi并发送广播更新到Activity,但Activity的广播接收器MyReceiver始终未接收到消息。博客内容包括了Activity和Service的代码片段,展示了动态注册BroadcastReceiver的过程。作者请求社区帮助找出可能的问题原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码个功能是在activity中启动service,在service中获取相关数据后广播给activity,activity刷新界面,但是activity中的onReceive怎么也不执行。
说明:使用的是动态注册

这个是activity代码:
package com.jade.hust;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.widget.ListView;

import com.example.indoorpostion.R;

public class MainActivity extends Activity {
    private static final String Jade = "JADE";
private ConnectivityManager cm;
private LocationManager lm;
private WifiManager wifiManager;
private List<ScanResult> WifiList;
private List<Wifi> list;
private  ListView listView;
private MyReceiver mr;
private  WifiAdapter wa;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.mian);

wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);//获得wifi管理器
if(!wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(true);
}
//获得listview控件
listView=new ListView(this);
listView = (ListView) findViewById(R.id.wifi_list);
 wifiManager.startScan();//开始扫描wifi
 WifiList=wifiManager.getScanResults();//返回扫描结果
 
 list=new ArrayList<Wifi>();//用list存储需要的wifi信息
 for(int i=0;i<WifiList.size();i++){
 Wifi wifi=new Wifi();
 wifi.setSSID(WifiList.get(i).SSID);
 wifi.setLEVEL(WifiList.get(i).level);  
 list.add(wifi);
 }
 
 wa=new WifiAdapter(this,list);//初始化适配器
listView.setAdapter(wa);//设置适配器
startService(new Intent(this,WifiListenerService.class));//启动监听wifi变化的服务

}


@Override
protected void onResume() {
// TODO Auto-generated method stub
//checkWifiGps();
Log.e("JADE","onResume=.............");
mr=new MyReceiver();//广播接收器,接收来自后台服务更新的wifi信息
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.communication.RECEIVER");//设置拦截器
this.registerReceiver(mr, filter);//注册广播
super.onResume();
}


@Override
protected void onDestroy() {
// TODO Auto-generated method stub
Log.e("JADE","onDestroy.............");

super.onDestroy();
}




@Override
protected void onPause() {
// TODO Auto-generated method stub
Log.e("JADE","onPause=.............");
this.unregisterReceiver(mr);//注销广播
super.onPause();
}



class MyReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.e("JADE","wifilist=.............");

}}
}

service代码:
package com.jade.hust;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

public class WifiListenerService extends Service {
       private WifiManager wifim;
       private WifiReceiver wr;
       private List<ScanResult> WifiList;
   private List<Wifi> list;
      
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i("JADE","onCreate=.............");
 wifim=(WifiManager) getSystemService(Context.WIFI_SERVICE);//获得wifi管理器
 wr= new WifiReceiver(); //创建广播接收器,接收系统wifi信息变化
super.onCreate();
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub

unregisterReceiver(wr);//注销广播
super.onDestroy();
}

@Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
IntentFilter filter=new IntentFilter();
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(wr, filter);//注册广播
scanWifi();

// new Thread(){//新建线程,1秒更新一次
// public void run(){
//          while (true) {
// scanWifi();
// try {
// sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
//         }
//
//
// }.start();

super.onStart(intent, startId);
}

private void scanWifi() {//扫描wifi
// TODO Auto-generated method stub
if(!wifim.isWifiEnabled())
wifim.setWifiEnabled(true);
wifim.startScan();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return super.onStartCommand(intent, flags, startId);
}

class WifiReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

if (intent.getAction().equals(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {

WifiList = wifim.getScanResults();

list=new ArrayList<Wifi>();

 for(int i=0;i<WifiList.size();i++){
 Wifi wifi=new Wifi();
 wifi.setSSID(WifiList.get(i).SSID);
 wifi.setLEVEL(WifiList.get(i).level);
 list.add(wifi);
 }
Intent intentM=new Intent();
intentM.putExtra("list", (Serializable)list);
intent.setAction("com.example.communication.RECEIVER");

LocalBroadcastManager.getInstance(context).sendBroadcast(intentM);//将扫描更新的结果广播
Log.i("JADE","onReceive=.............");

}      
}
   
   }

}

实在是没有检查出问题来,网上也搜了很久,求大神赐教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值