【问题标题】:How can I get my android app to execute code when a notification is received when it's in background?当在后台收到通知时,如何让我的 android 应用程序执行代码?
【发布时间】:2017-11-27 11:05:55
【问题描述】:

我正在尝试为 Android 编写一个远程闹钟应用程序,因为我的朋友有时会错过她的火车或来得太早(我不想醒来,只想让她设置我的闹钟时间)。

我在短短几分钟内就弄清楚了如何使用 Java 设置闹钟,但该功能必须远程执行。该怎么做?

目前我正在使用Googles Firebase Cloud Messaging service 发送通知,包括作为参数的闹钟时间。 但是,当我收到它们并且应用程序未打开时,它不会执行任何代码,而是等待用户点击通知。但我想让应用程序做的是set the alarm clock automatically when a notification is received

我知道这可能确实违反了一系列安全准则,但这不是 PlayStore 的应用程序,而是我自己的应用程序。

我的想法是构建某种在等待通知的后台一直处于活动状态的服务你认为这样的事情可能吗?

感谢您的帮助:-)

【问题讨论】:

    标签: java android firebase service notifications


    【解决方案1】:

    尝试将通知负载传递给服务类,您可以在后台设置警报管理器。

    【讨论】:

    • 我目前没有服务。我只有一个 Main Activity,对通知负载没有影响。
    • 您想要实现的是静默通知。一旦到达设备,它甚至不会出现,只是设置一个警报。因此,为了处理这个问题,您从广播接收器获取通知并将其发送到服务类。在那里你可以处理你想做的事情。无需打开应用程序。
    • 好的。但是我怎样才能得到广播接收器识别的通知呢?
    • 在实现 FCM 时,您必须注册广播接收器来监听通知。在 onReceive 中将有效负载发送到服务。
    • 到目前为止,我已经扩展了 Firebase API 提供的 FirebaseMessagingService 类并覆盖了 onMessageReceived。但是只有在应用程序处于活动状态时显示通知时才会执行该 void。
    【解决方案2】:

    当应用被杀死或在后台时我们无法获取通知信息,但如果通知到达,FirebaseMessagingService 的 onCreate 将被触发,因此我们可以尝试在 onCreate 中从您的后端服务器获取通知信息。

    public class MyFirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
    
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "in onCreate, try to get informations from backend server, ex..send http request here");
    }
    

    【讨论】:

    • 谢谢,好像有帮助,我试试。
    • 我不想启动活动,但需要访问通知(即使设备被锁定)
    • 我认为在后台应用时无法访问通知,但您可以从后端服务器获取信息。就我而言,我在 onCreate 中访问后端服务器,例如,发送 http 请求以获取通知计数以在启动图标上显示徽章计数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多