Android:如何从C2DMBaseReceiver调用非静态函数?

时间:2011-06-15 03:54:35

标签: android android-c2dm

我正在使用android-c2dm,我的​​设备成功接收到它的消息。我想调用非静态函数(在已存在的Activity中)对该消息执行某些操作,但只是从C2DMBaseReceiver调用它是非法的。如何将此信息传回活动?

编辑:如果我调用静态函数来分配变量(或设置共享首选项),然后调用将使用这些变量来执行需要执行的操作的处理程序,该怎么办?这是不好的风格吗?

2 个答案:

答案 0 :(得分:1)

你可以做的是以某种方式将消息详细信息放在Intent中(最粗略的方法是将消息序列化为String并将其添加为Intent extra)然后使用startActivity将该Intent发送到Activity 。活动可以检查额外的,知道它是一条消息,提取和反序列化消息,然后去城镇。

如果要确保目标Activity的现有实例收到消息,则可能需要设置适当的启动模式或Intent标志。

答案 1 :(得分:1)

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