1

我有以下表现 -GcmListenerService onMessageReceived称为只有当应用程序在前台

<service 
    android:name=".RegistrationIntentService" 
    android:exported="false" /> 

<service 
    android:name=".TestGcmListenerService" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="com.example.test" /> 
    </intent-filter> 
</service> 

<service 
    android:name=".RegistrationIDListenerService" 
    android:exported="false"> 
    <intent-filter> 
     <action android:name="com.google.android.gms.iid.InstanceID" /> 
    </intent-filter> 
</service> 

<receiver 
    android:name="com.google.android.gms.gcm.GcmReceiver" 
    android:exported="true" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 

     <category android:name="com.example.test" /> 
    </intent-filter> 
</receiver> 

而继onMessageReceived方法 -

@Override 
    public void onMessageReceived(String from, Bundle data) { 
     ObjectMapper objectMapper = new ObjectMapper(); 
     Message message; 
     try { 
      message = objectMapper.readValue(String.valueOf(data.get("message")), Message.class); 
      MessageNotification.notify(this, message, 1); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

会发生什么事是,onMessageReceived被称为只有当应用程序在前台。否则它不会被调用,并且不会显示通知。当我打开应用程序时,所有通知都会一次显示。

不是GcmListenereService如果锁定并唤醒设备工作?如何解决这个问题?

回答

1

谷歌搜索和设法找到这个线程在github上,这几乎是你的关注相同,其中onMessageReceived() is only called when app is on foreground。原因是因为只发送了通知消息。按照包含在该线程的描述:

通知消息 - 这些是为了生成与由应用程序没有中间处理的通知。 如果应用程序正在运行,它们只会触发onMessageReceived。

数据消息 - 这些旨在悄悄地将数据传递到应用程序的消息服务。 即使应用程序在后台,它们也会触发onMessageReceived。服务可能会选择使用常规系统通知API生成通知,或者可能会选择静默处理该消息。

我想您发送通知消息,同时期待行为数据电文在踢。

这里也是在GitHub的线程中提到的SO post of Shiprack。希望这可以帮助。祝你好运。

相关问题