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将不会被解雇。