Java 应用程序打开时GCM Android通知

Java 应用程序打开时GCM Android通知,java,android,android-notifications,google-cloud-messaging,Java,Android,Android Notifications,Google Cloud Messaging,我已经为Android正确设置了谷歌云消息,并从我的服务器接收通知。但是,如果应用程序已打开,我希望避免发出通知,但要获取数据并通知应用程序中的用户。请查看下面处理通知的我的GCMinentService: @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessagi

我已经为Android正确设置了谷歌云消息,并从我的服务器接收通知。但是,如果应用程序已打开,我希望避免发出通知,但要获取数据并通知应用程序中的用户。请查看下面处理通知的我的GCMinentService:

@Override
protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) {  
        if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
            if(MainActivity.app_is_open){
                // I would like to call a function from MainActivity to fetch data here 
            } else 
                // Sends notification here
        }
    }
    GcmBroadcastReceiver.completeWakefulIntent(intent);
}

我无法引用MainActivity中的函数,因为它们是非静态的。常用的方法是什么?我很难找到任何与这种情况相关的问题。

我建议您看看这个:有几个“黑客”可以知道应用程序是否在后台运行,其中一个是考虑使用活动管理器运行的流程。另一个是跟踪活动生命周期。在我提供的链接中,您将能够获得更详细的信息


希望这有帮助。

我设置了一个布尔值,以确定应用程序是否正在运行。但这不是我想问的。另一方面,你可以在任何地方创建一个静态方法,我不知道你想如何注意到用户,如果它是一个toast/对话框或任何一种需要上下文的视图,你可以在intent中使用getApplicationContext()获得它。如果您使用的是DB,还可以在活动中调用静态方法并在那里处理事件,只需考虑更新UI中的更改(在MainActivity中)需要哪些参数。