【发布时间】:2011-11-13 14:19:53
【问题描述】:
从示例中这看起来很简单。也许你可以告诉我我做错了什么。我无法获得接收本地服务发送的广播的活动。
我有启动 Service1 的 Activity1:
startService(new Intent(Activity1.this, Service1.class));
Activity1 然后启动 Activity2:
startActivity(new Intent(Activity1.this, Activity2.class));
Service1,本地服务,监听下载:
protected final BroadcastReceiver service2DownloadBroadcastReceiver = new BroadcastReceiver()
{
public void onReceive(final Context context, final Intent intent)
{
...
broadcastDownloadFinished(Uri.fromFile(downloadedFile));
Service1 的广播接收者然后广播自己的消息:
protected Intent broadcastDownloadFinished(final Uri uri)
{
final Intent intent = new Intent(ACTION_DOWNLOAD_FINISHED).setData(checkNotNull(uri));
sendBroadcast(intent);
当时处于前台的Activity2使用自己的广播接收器监听ACTION_DOWNLOAD_FINISHED意图:
private final BroadcastReceiver activity2DownloadBroadcastReceiver = new BroadcastReceiver()
{
public void onReceive(final Context context, final Intent intent)
{
Log.i(Activity2.class.getSimpleName(), "Received download event: " + intent.getAction() + " " + intent.getData());
Activity2当然会注册接收者:
protected void onResume()
{
super.onResume();
final IntentFilter downloadIntentFilter = new IntentFilter();
downloadIntentFilter.addAction(ACTION_DOWNLOAD_FINISHED);
registerReceiver(activity2DownloadBroadcastReceiver, downloadIntentFilter);
如果重要,ACTION_DOWNLOAD_FINISHED 类似于 "com.example.intent.action.DOWNLOAD_FINISHED"。
Service1 在其接收器中接收到下载管理器事件,并且显然广播了它自己的自定义事件,但 Activity2 似乎从未接收到它。我做错了什么?在处理另一个意图的过程中广播一个意图是否有问题? (我不这么认为——这是异步的,对吧?)
更新: 为了确保在接收广播的过程中发送广播没有问题,我将广播代码更改为在主线程三秒后实际执行广播:
Log.i(getClass().getSimpleName(), "...ready to broadcast");
final Intent intent = new Intent(ACTION_DOWNLOAD_FINISHED).setData(checkNotNull(uri));
mainThreadHandler.postDelayed(new Runnable()
{
public void run()
{
Log.i(getClass().getSimpleName(), "...broadcasting");
sendBroadcast(intent);
Log.i(getClass().getSimpleName(), "...broadcasted");
}
}, 3000);
Log.i(getClass().getSimpleName(), "...scheduled to broadcast");
不出所料,日志显示:
...ready to broadcast
...scheduled to broadcast
...broadcasting
...broadcasted
但在活动中没有收到任何内容。请帮忙。
【问题讨论】:
标签: android service broadcastreceiver