从 main activity 调用 Firebase 消息服务的方法
Call methods of Firebase Messaging Service from main activity
TL;DR:如何在主 activity 中关闭在 Firebase 消息服务中打开的振动?
我正在创建一个从 Firebase 获取推送通知的应用程序。这些推送通知是由连接到我的 raspberry pi 的 PIR 运动传感器生成的。
这个应用程序的目的是,当 PIR 检测到运动时,应该在我的 phone 上启动警报。 (现在这个闹钟是通过我phone的振动实现的)。
到目前为止,振动警报已启动(这是在我的 Firebase 消息服务中完成的),我希望能够通过单击应用程序中的按钮来结束警报。
根据我对 "classical" java 编程的理解,我必须从主 activity 访问我的 Firebase 服务中使用的 Vibrator 对象。但是我该怎么做呢?我尝试使用活页夹来实现,但这不起作用,因为 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 中只定义一次 alarmVibrator,你将能够在 FcmMessagingService 中打开或关闭 class。
例如,您可以在 AppController class 中定义它,如下所示:
public static Vibrator alarmVibrator;
那么你可以这样处理:
@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。
TL;DR:如何在主 activity 中关闭在 Firebase 消息服务中打开的振动?
我正在创建一个从 Firebase 获取推送通知的应用程序。这些推送通知是由连接到我的 raspberry pi 的 PIR 运动传感器生成的。
这个应用程序的目的是,当 PIR 检测到运动时,应该在我的 phone 上启动警报。 (现在这个闹钟是通过我phone的振动实现的)。
到目前为止,振动警报已启动(这是在我的 Firebase 消息服务中完成的),我希望能够通过单击应用程序中的按钮来结束警报。
根据我对 "classical" java 编程的理解,我必须从主 activity 访问我的 Firebase 服务中使用的 Vibrator 对象。但是我该怎么做呢?我尝试使用活页夹来实现,但这不起作用,因为 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 中只定义一次 alarmVibrator,你将能够在 FcmMessagingService 中打开或关闭 class。
例如,您可以在 AppController class 中定义它,如下所示:
public static Vibrator alarmVibrator;
那么你可以这样处理:
@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。