Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android sendBroadcast-等待BroadcastReceiver完成_Android_Android Intent_Google Cloud Messaging - Fatal编程技术网

Android sendBroadcast-等待BroadcastReceiver完成

Android sendBroadcast-等待BroadcastReceiver完成,android,android-intent,google-cloud-messaging,Android,Android Intent,Google Cloud Messaging,我在Android应用程序中使用了一个BroadcastReceiver,它只包含以下代码: public BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { GcmIntentService.isHandled = true; Toast.makeText(c

我在Android应用程序中使用了一个
BroadcastReceiver
,它只包含以下代码:

public BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        GcmIntentService.isHandled = true;
        Toast.makeText(context, "broadcast receiver test", Toast.LENGTH_SHORT).show();
    }
}
我使用此接收器来确定我的活动是否正在运行,并在列表视图中执行一些更新,而无需GCMinentService生成任何通知

到目前为止,代码很简单,只创建了一条toast消息,因此我无法在调用
sendBroadcast
后立即从
gcminentservice.isHandled
捕获布尔值

是否可以以任何方式确定接收器的代码是否已完成运行。我知道
sendBroadcast
是一个异步调用,到目前为止,我正在使用
Thread.sleep(1000)
来等待isHandled值,但如果有更可靠的方法来实现这一点,那就太好了


有什么想法吗?

你的问题可以分为两部分:

1.如何知道是否有接收器实际接收到广播

2.接收方应如何通知服务消息已被处理

似乎很难通过标准的意图api实现第一个目标,相反,我建议您可以尝试“观察者模式”


您可以在应用程序中创建一个全局对象,并使活动实现,在onCreate()中注册自身,在onDestory()中注销。在服务中,您可以检查是否有活动正在运行,然后简单地通知它。

您在哪里调用
Thread.sleep()
?在扩展
IntentService
的my
GCMinentService
类中,需要显示更多代码。您的体系结构不清楚,您的问题也不清楚。