广播接收器收不到
Broadcast Receiver not receiving
我知道这个问题经常出现在这里,但我已经查看了大约 20 个堆栈溢出问题,但未能找到解决方案。我相当确定这很简单,我做错了,但我是 Android 的新手,这项作业将在 7 小时左右完成。
一切正常,直到接收方被调用。这是来自服务的电话
Intent intent = new Intent(getApplicationContext(), MainActivity.WatchReceiver.class);
intent.putStringArrayListExtra(CHANGEKEY, changedURLs);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
现在是接收器,嵌套在主程序中 activity
public class WatchReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(null, "broadcast received");
markAsChanged(intent.getStringArrayListExtra(WatchService.CHANGEKEY));
}
}
还有主要的 activity 启动函数,我在其中注册接收器
@Override
protected void onStart() {
super.onStart();
// Bind to LocalService
wr = new WatchReceiver();
markedAsChanged = new ArrayList<Integer>();
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(wr, new IntentFilter());
Intent intent = new Intent(this, WatchService.class);
sc = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
wb = (WatchService.WatchBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
wb = null;
}
};
bindService(intent, sc, Context.BIND_AUTO_CREATE);
}
显式 Intents
不适用于 registerReceiver()
,无论您是在 Context
上调用 registerReceiver()
(用于系统级广播)还是 LocalBroadcastManager
(本地广播)。
改为:
定义一个动作字符串(例如,final String ACTION="com.dellosa.nick.ITS_HUMP_DAY";
)
创建 Intent
广播时使用该操作字符串 (new Intent(ACTION)
)
在创建 IntentFilter
(new IntentFilter(ACTION)
)
时使用该操作字符串
我知道这个问题经常出现在这里,但我已经查看了大约 20 个堆栈溢出问题,但未能找到解决方案。我相当确定这很简单,我做错了,但我是 Android 的新手,这项作业将在 7 小时左右完成。
一切正常,直到接收方被调用。这是来自服务的电话
Intent intent = new Intent(getApplicationContext(), MainActivity.WatchReceiver.class);
intent.putStringArrayListExtra(CHANGEKEY, changedURLs);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
现在是接收器,嵌套在主程序中 activity
public class WatchReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(null, "broadcast received");
markAsChanged(intent.getStringArrayListExtra(WatchService.CHANGEKEY));
}
}
还有主要的 activity 启动函数,我在其中注册接收器
@Override
protected void onStart() {
super.onStart();
// Bind to LocalService
wr = new WatchReceiver();
markedAsChanged = new ArrayList<Integer>();
LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(wr, new IntentFilter());
Intent intent = new Intent(this, WatchService.class);
sc = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
wb = (WatchService.WatchBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
wb = null;
}
};
bindService(intent, sc, Context.BIND_AUTO_CREATE);
}
显式 Intents
不适用于 registerReceiver()
,无论您是在 Context
上调用 registerReceiver()
(用于系统级广播)还是 LocalBroadcastManager
(本地广播)。
改为:
定义一个动作字符串(例如,
final String ACTION="com.dellosa.nick.ITS_HUMP_DAY";
)创建
Intent
广播时使用该操作字符串 (new Intent(ACTION)
)在创建
IntentFilter
(new IntentFilter(ACTION)
) 时使用该操作字符串