当前位置: 首页 > 知识库问答 >
问题:

接收gcm消息推送的刷新活动

殳宸
2023-03-14

更新:不推荐使用GCM,请使用FCM

如果我的应用程序打开,如何在收到gcm推送通知时刷新活动。我有一个活动,它包含一个列表视图,其中充满了来自服务器的数据。如果我收到gcm推送通知(其中也包含一些数据),我想刷新我的活动(这里向listviewhtml" target="_blank">添加一个项目)。

    < li >一种替代方法是添加计时器,该计时器定期执行服务器请求并更新列表适配器数据,但我不希望这样做,因为这将占用大量资源。 < li >我是否需要添加广播接收器,该接收器将在接收gcm推送时触发,从而进一步请求更新的服务器数据并更新我的活动UI?

亲爱的评论者,请仔细阅读问题,我只需要刷新列表(如果应用程序已打开并且该特定活动已打开),否则不需要相同。

共有3个答案

郑声
2023-03-14

对于“接收gcm推送通知时的刷新活动”,接受答案确实是正确的(我也投了赞成票)。但是如果你只想更新一个正在显示的列表视图,你不需要广播接收器。

您的GCM侦听器服务可以使用ContentProvider更新数据库,而不是插入直接sql查询。

然后,您可以依赖ContentResolver上的notifyChange方法来完成这项工作。

通知已注册的观察者一行已更新。要注册,请调用ynsterContent观察者()。默认情况下,CursorAdapter对象将收到此通知。如果syncToNetwork为true,这将尝试使用为提供的uri的权限注册的同步适配器安排本地同步。不会将任何帐户传递给同步适配器,因此所有匹配的帐户都将被同步。

马朝斑
2023-03-14

我假设您的<code>gcmbroadcasreceiver<code>在它自己的.java文件中?

就刷新活动而言,我也想知道这个问题的答案。

但是为了知道特定活动是否处于活动状态,这意味着在屏幕上只需添加一个boolean(称其为“active”)并将其设置为true在您的活动的onResume()事件中,并在onPance()事件中设置为false

protected void onResume()
{
    super.onResume();

    active = true;;
}

protected void onPause()
{
    super.onPause();

    active = false;
}

活动变量将是全局静态的布尔值。通过这种方式,您可以知道特定活动是否在“前面”。

希望这能有点帮助。

子车俊材
2023-03-14

我花了几个小时才弄明白。在这里发布,以防任何其他人有相同的问题。

这个想法是你必须注册你的活动作为一个广播接收器。最简单的方法是这样的:

//register your activity onResume()
@Override
public void onResume() {
    super.onResume();
    context.registerReceiver(mMessageReceiver, new IntentFilter("unique_name"));
}

//Must unregister onPause()
@Override
protected void onPause() {
    super.onPause();
    context.unregisterReceiver(mMessageReceiver);
}


//This is the handler that will manager to process the broadcast intent
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        // Extract data included in the Intent
        String message = intent.getStringExtra("message");

        //do other stuff here
    }
};

上面的代码包含在您要“侦听”事件的活动中。

现在,我们如何向这个“监听器”发送数据?转到您的推送通知处理程序(或者从您想要更新活动的地方),当您收到通知时,调用此函数:

// This function will create an intent. This intent must take as parameter the "unique_name" that you registered your activity with
static void updateMyActivity(Context context, String message) {

    Intent intent = new Intent("unique_name");

    //put whatever data you want to send, if any
    intent.putExtra("message", message);

    //send broadcast
    context.sendBroadcast(intent);
}

当您调用上述函数时,您的活动应该会收到它。

注意:您的活动必须处于运行/打开状态才能接收广播意图

注2:我转到了一个名为“otto”的库。它实际上做同样的事情,但更容易,通过应用程序“广播事件”。这里有一个链接http://square.github.io/otto/

 类似资料:
  • 我正在开发android GCM,以便我的应用程序向用户发送推送通知。我正在学习这个教程 http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/ 但是在本教程中,它表明我们可以向单个设备发送推送通知。但我想一次向所有用户发送推送通知。

  • 我有一个应用程序,可以通过谷歌云消息接收消息。我需要在收到云消息时自动启动一个活动,必要时唤醒设备。 虽然它似乎是一个糟糕的UI设计,其中一些东西被有力地显示给用户,但这个应用程序对用户的工作是至关重要的,所以当一个云消息到达时,能够清楚地查看它对用户来说是更有用的。 当收到云消息时,我尝试调用,当应用程序位于后台时,它可以正常工作。但是,一旦该应用程序从最近的应用程序列表中删除,新活动就不会启动

  • 消息推送 PDF版下载 如流开放了消息发送接口,企业可以使用这些接口让企业应用与用户间进行双向通信。 推送消息 向成员推送消息 请求方式:POST(HTTPS) 请求地址:https://api.im.baidu.com/api/message/send?access_token=ACCESS_TOKEN 请求body:(每种类型的消息请求body不同,详见消息推送格式) 参数说明: 参数 类型

  • 1、离线消息 接口说明: 接口类型:回调型接口 接口作用:智齿将客服发送给用户的离线消息推送至企业预先配置好的回调地址上。 请求方法: POST 请求格式: { "type": 202, //消息类型,表示客服发送消息给客户 "partnerId": "", //企业自己的用户id "msgId": "" ,//消息id "content": "" ,//客

  • 通过http发送消息后。我无法在android设备4.0版上接收消息。4.当调试已启用但意图执行操作com时,它将触发OnReceive()方法。谷歌。Androidc2dm。意图注册,应该是com。谷歌。Androidc2dm。意图接收所以我无法得到消息。Rest一下,一切正常。 我的Android。清单文件代码为 和BroadCastRecector文件,其中OnRecve()方法在发送消息后