BroadcastReceiver onReceive()没有被调用

jadechen19910909 2015-06-08 08:23:24
代码个功能是在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=.............");

}
}

}

}

实在是没有检查出问题来,网上也搜了很久,求大神赐教
...全文
554 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jadechen19910909 2015-06-11
  • 打赏
  • 举报
回复
引用 4 楼 come_on_Angelababy 的回复:
@Override protected void onPause() { // TODO Auto-generated method stub Log.e("JADE","onPause=............."); this.unregisterReceiver(mr);//注销广播 super.onPause(); } 你是不是切换页面把广播注销了
、 没有页面切换,只是一个activity和一个service而已
jadechen19910909 2015-06-11
  • 打赏
  • 举报
回复
引用 2 楼 tcmakebest 的回复:
代码好好贴,看着头大,试试这句
content.sendBroadcast(intentM);
没有试试,后来没有用广播改用其他通信了
jadechen19910909 2015-06-11
  • 打赏
  • 举报
回复
引用 1 楼 haha_321 的回复:
com.example.communication.RECEIVER 是什么?
类似标志的东东
StoneHui_ 2015-06-10
  • 打赏
  • 举报
回复
在wifi状态发生改变的时候系统本身就会发出一个广播,为什么还要多此一举的自己去不断检查再发送广播告诉Activity呢?!直接在Activity中写一个广播接受者接收系统的广播不就行了。
水的川 2015-06-10
  • 打赏
  • 举报
回复
引用 4 楼 come_on_Angelababy 的回复:
@Override protected void onPause() { // TODO Auto-generated method stub Log.e("JADE","onPause=............."); this.unregisterReceiver(mr);//注销广播 super.onPause(); } 你是不是切换页面把广播注销了
你注册广播的时候,在oncreate中注册啊,你在onresume中注册,都没被执行到。。。
come_on_Angelababy 2015-06-09
  • 打赏
  • 举报
回复
@Override protected void onPause() { // TODO Auto-generated method stub Log.e("JADE","onPause=............."); this.unregisterReceiver(mr);//注销广播 super.onPause(); } 你是不是切换页面把广播注销了
tcmakebest 2015-06-08
  • 打赏
  • 举报
回复
发送广播的时候用了 LocalBroadcastManager,那应该注册接收广播的时候也要用。
tcmakebest 2015-06-08
  • 打赏
  • 举报
回复
代码好好贴,看着头大,试试这句
content.sendBroadcast(intentM);
haha_321 2015-06-08
  • 打赏
  • 举报
回复
com.example.communication.RECEIVER 是什么?

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧