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

FirebaseMessagingService 11.6.0处理意图

齐意致
2023-03-14

FirebaseMessagingService具有OnMessageReceived()方法,我们应该重写方法来处理通知,但这只在应用程序处于前景时才起作用。

要处理通知,即使应用程序在后台,我也会重写HandleIntent,只调用OnMessageReceived()

firebasemessagingservice11.6.0中,handleintent方法成为最终的,也就是说,我不能像以前那样重写它。

当我的应用程序在11.6.0的后台时,我应该如何处理通知?

public class NotificationsListenerService extends FirebaseMessagingService {
    private static final String TAG = "NotificationsListenerService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) 

        String notifyData = remoteMessage.getData().get("notifData");

        if(notifyData.contains("|")){
            String[] itens = notifyData.split("\\|");
            notifyData = itens[0];
        }


        String notifyType = remoteMessage.getData().get("notifType");
        String title = remoteMessage.getData().get("title");
        String message = remoteMessage.getData().get("body");

        if(!isAppInForeground(App.getContext())){
            sendNotification(title, message, notifyData, notifyType);
        }
    }

    @Override
    public final void handleIntent(Intent intent) {
        ...
        this.onMessageReceived(builder.build());
        ...
    }

    private void sendNotification(String messageTitle, String messageBody, String notifyData, String notifyType) {
        ...
    }


    //Detect if app is in foreground
    private boolean isAppInForeground(Context context) {
        ...
    }
}

共有1个答案

施选
2023-03-14

不是为了任何人都可以重写handleintent()。这就是为什么它是最终的。此外,您还会注意到javadocs中完全没有它--这是有意的。

如果希望在任何情况下(前台和后台)处理消息,请使用onMessageReceived()。该方法的javadoc表示:

在收到消息时调用。

这应该适用于数据消息,但不适用于从控制台发送的通知消息。通知消息具有不同的传递行为。请参阅有关消息类型和如何处理它们的文档。

 类似资料:
  • 函数 unexpected 调用 set_unexpected 函数指定的函数。如果没有用 set_unexpected 函数指定函数,则默认调用 terminate。 函数 terminate 可以显式调用,在无法捕获抛出的异常时、在异常处理期间打乱堆栈时、作为调用unexpected的默认操作时或在异常导致堆栈解退时析构函数抛出异常的情况下都会调用 terminate。 函数set_termi

  • 前面讲到了 libevent 实现多线程的方法,然而在多线程的环境中注册信号事件,还是有一些情况需要小心处理,那就是不能在多个 libevent 实例上注册信号事件。依然冠名追加到 libevent 系列。 以 2 个线程为例,做简单的场景分析。 1 首先是创建并初始化线程 1 的 libevent 实例 base1 ,线程 1 的 libevent 实例 base2 ; 2 在 base1 上注

  • 我正在编写一个程序,当一个特定的短信到达手机时,我的应用程序中的主要活动应该被调用。我已经注册了一个< code>BroadcastReceiver,调用该活动的意图在< code>onReceive()方法中。问题是,每次我发送这个特定的短信,我得到一个关闭的力量。在读取logcat时,我看到了下面的NullPoint异常: 但就我而言,一切都做对了。谁能告诉我问题在哪里?提前谢谢你。 以下是清

  • 我对这个android编程是新手。所以,现在当我想从一个活动转到另一个活动时,我遇到了一个问题。当我在模拟器中运行时,它显示MyDemo在按下按钮指向另一个页面后已经停止工作。我已经阅读和尝试了很少的解决方案张贴在类似的问题,但似乎不能解决问题。任何建议都会对我有很大帮助。谢谢你。 这是错误日志: 09-09 10:56:36.046 247 4-2489/com.example.dothis.d

  • 问题内容: 我有为任意键实现“锁定处理程序”的代码。给定一个,它确保一次只能有一个线程可以(或等于)该键(这意味着调用该调用)。 到目前为止,我有这样的代码: 我知道这段代码可能导致,因为没有清晰的地图。 我考虑如何制作地图,该地图将累积有限数量的元素。当超过限制时,我们应该用new替换最旧的访问元素(此代码应与最旧的元素作为监视器同步)。但是我不知道如何进行回调,这将告诉我超出限制。 请分享您的

  • 问题内容: 由于弹出窗口 ,Selenium投掷出现问题 警报具有和按钮。我知道两种解决方法 第一种方法是重新打开一个新会话 第二种方法是使用Robot类 但是,这种方法不是省时的。有什么更好的办法吗? 问题答案: 这应该可以解决问题: