从主要活动中调用firebase消息服务的方法



tl; dr:我如何关闭在Firebase消息服务中打开的振动,在主要活动中?

我正在创建一个从Firebase获取推送通知的应用程序。这些推送通知是由连接到我的Raspberry Pi的PIR运动传感器生成的。

该应用程序的目的是,当PIR检测到手机上的警报时,请发出警报。(现在,我的手机振动实现了这个警报)。

到目前为止,振动警报启动(这是在我的Firebase消息服务中完成的),我希望能够通过单击应用程序中的按钮来结束警报。

从我对"经典" Java编程的理解中,我必须访问从主要活动中使用的燃烧器对象。但是我该怎么做呢?我试图使用粘合剂进行操作,但这不起作用,因为firebasemessagingservice中的onbind()方法是最终的,不能被覆盖。

我当前的代码可以在这里看到:

public class FcmMessagingService extends FirebaseMessagingService {
Vibrator alarmVibrator;
@Override
public void onCreate() {
    super.onCreate();
    alarmVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getData().get("Alarm").equals("1")){
        Log.d("alarm","on");
        alarmVibrator.vibrate(10000);
    }else{
        Log.d("alarm","off");
        alarmVibrator.cancel();
    }
}

此代码可以打开振动(由于某种原因,关闭部分不起作用,但这是我稍后可能会查看的问题)

我认为,如果您在基本Activtiy中仅定义一次宣传员,则可以在FCMMESSAGINGSERVICE类中打开或关闭。

例如,您可以在AppController类中定义它:

公共静态振动器警报器;

然后您可以这样处理:

   @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
       if (remoteMessage.getData().get("Alarm").equals("1")){
        Log.d("alarm","on");
        AppController.alarmVibrator.vibrate(10000);
       }else{
        Log.d("alarm","off");
        AppController.alarmVibrator.cancel();
       }
    }

确保您的应用在前景或onmessagereceived将不会被解雇。

最新更新