2011-06-15 26 views
2

我正在使用android-c2dm,并且我的设备已成功接收来自它的消息。我想调用一个非静态函数(在一个已经存在的Activity中)来处理这个消息,但是从C2DMBaseReceiver调用它是非法的。我怎样才能将这些信息传回活动?Android:如何从C2DMBaseReceiver调用非静态函数?

编辑:如果我调用一个静态函数来分配变量(或设置共享首选项),然后调用一个处理程序,它将使用这些变量来做什么需要做什么?那是不好的风格?

回答

1

你可以做的是将消息细节以某种方式放在一个Intent中(最粗糙的方法是将消息序列化为一个字符串并将其添加为一个Intent额外),然后使用startActivity将该意图发送到该活动。活动可以检查额外的东西,知道它是一个消息,提取并反序列化消息,然后去镇上。

如果您想确保目标活动的现有实例接收到该消息,则可能需要设置适当的启动模式或意向标志。

+0

我原本忘了包括这个,Activity已经存在。基本上我想在我的服务器收到消息后立即更改文本视图。 startActivity不适用于它? – 2011-06-15 15:23:42

+0

活动可能不在后台(不可见)或甚至未启动。如果活动未开始,则不能更改TextView,因为在那段时间它不存在。 – 2011-06-15 20:20:44

+0

如果存在活动的实例,则可以使用onNewIntent更新它。 – Femi 2011-06-15 20:30:55

1

您可以通过onMessage方法从Intent获取消息,然后在用户单击Notification后显示Notification和startActivity。您可以使用Intent标志在前景中创建背景活动。 所以如果活动没有开始 - 如果活动在后台 - 它将在前台显示,并且如果它在前台 - 它将被启动 - 那么我们只需要改变TextView文本。 您也可以在不显示通知的情况下启动活动。 你也可以使用onNewIntent(Intent intent)活动方法来改变文本。您可以将来自Google意图的消息放入onMessage中,并将此消息与FLAG_ACTIVITY_SINGLE_TOP标志一起放入新的Intent和startActivity中。

相关问题