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

Android:如何从C2DMBaseReceiver调用非静态函数?,android,android-c2dm,Android,Android C2dm,我正在使用android-c2dm,我的设备成功地接收到来自它的消息。我想调用一个非静态函数(在已经存在的活动中)来处理该消息,但仅仅从C2DMBaseReceiver调用它是非法的。如何将此信息传输回活动 编辑:如果我调用一个静态函数来分配变量(或设置共享首选项),然后调用一个处理程序,它将使用这些变量来执行需要执行的操作,该怎么办?这是一种糟糕的风格吗?您可以做的是以某种方式将消息的详细信息放入意图中(最粗糙的方法是将消息序列化为字符串,并将其添加为额外的意图),然后使用startActiv

我正在使用android-c2dm,我的设备成功地接收到来自它的消息。我想调用一个非静态函数(在已经存在的活动中)来处理该消息,但仅仅从C2DMBaseReceiver调用它是非法的。如何将此信息传输回活动


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

您可以做的是以某种方式将消息的详细信息放入意图中(最粗糙的方法是将消息序列化为字符串,并将其添加为额外的意图),然后使用
startActivity
将该意图发送给活动。该活动可以检查额外的内容,知道这是一条消息,提取并反序列化该消息,然后返回城镇


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

您可以在onMessage方法中从Intent获取消息,然后在用户单击通知后显示通知和startActivity。您可以使用意图标志将后台活动带到前台。 所以,若活动并没有启动——它将被启动,若活动在后台——它将显示在前台,若它在前台——那个么我们只需要更改文本视图文本。 您还可以在不显示通知的情况下启动触觉。
您还可以使用onNewIntent(Intent-Intent)活动方法更改文本。您可以将onMessage中来自google intent的消息放入新的intent和startActivity中,并使用此intent和FLAG_ACTIVITY_SINGLE_TOP FLAG。

我最初忘记包含此内容,活动已经存在。基本上,我希望在从服务器收到消息后立即更改文本视图。startActivity不会工作,是吗?活动可以不在背景中(不可见),甚至不启动。如果“活动”未启动,则无法更改TextView,因为它在该时间内不存在。如果“活动”的实例存在,则可以使用onNewIntent进行更新。我最近在另一个问题上发现了这一点。谢谢你的帮助。