Android 如何通过GCM侦听器服务刷新活动

Android 如何通过GCM侦听器服务刷新活动,android,google-cloud-messaging,Android,Google Cloud Messaging,我在刷新活动时遇到了一个小问题。我已将GCM侦听器服务添加到我的应用程序中。它的侦听器服务应该使我的活动在从GCM服务获得“消息”时刷新。我不想建立一个通知。此外,我不想使用Timer()定期刷新活动 有以下代码: MyGcmListenerService.java public void onMessageReceived(String from, Bundle data) { String message = data.getString("message"); String

我在刷新活动时遇到了一个小问题。我已将GCM侦听器服务添加到我的应用程序中。它的侦听器服务应该使我的活动在从GCM服务获得“消息”时刷新。我不想建立一个通知。此外,我不想使用Timer()定期刷新活动

有以下代码:

MyGcmListenerService.java

public void onMessageReceived(String from, Bundle data) {
    String message = data.getString("message");
    String theme = data.getString("theme");
    sendNotification(message,theme);
}

private void sendNotification(String message, String theme) {
    Messages mess = new Messages();
    mess.message=message;
    //what I have to do here to make my FirstLayout.java refresh?
}
FirstLayout.java

package com.notif.rasulbek.notifyme;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;



public class FirstLayout extends AppCompatActivity {
    TextView mes;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mes = (TextView)findViewById(R.id.firstMes);
我想替换以下行:

        Timer autoUpdate = new Timer();
        autoUpdate.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        mes.setText(Messages.message);
                    }
                });
            }
        }, 0, 2000);
      }//this approach doesn't like me :(

}

同样,我想从MyGcmListenerService.java发送一个类似信号的东西,它刷新我的活动。请任何人帮我解决这个问题。事先谢谢。

最简单的方法之一是使用发送广播,然后在活动中使用收听广播。一旦听者“听到”广播,它就可以触发对活动的必要更新


您可以看到在向GCM注册活动时更新该活动的示例应用程序。

有两种实现方法。其中一个与@Arthur提到的非常相似,我正在使用一组不同的API进一步扩展这个概念

  • 在GCMINENTService调用的
    onReceive
    方法中,该方法具有在收到GCM通知时广播消息的代码
  • main活动的
    onCreate中,注册一个接收者以寻址此广播消息
  • 最后,BroadcastReceive的onReceive将使用
    mHandleMessageReceiver
    调用更新I
另一个更简单的方法是使用布尔变量直接更新onResume中的UI。其余的特性与上面的策略相同,即在收到GCM通知时收听广播,并将其发送到更新UI

下面是一个示例代码:

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

    update = true;;
}

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

   update = false;
}

确保
更新
布尔值是静态/全局的。

嗨,阿尼夫,非常感谢你的回答。但不幸的是,它不起作用。更具体地说,
mes.setText()
无法获取
Message.Message
变量,当它被
MyGcmListenerService