使用FCM v1协议抑制Android通知中的振动
我看不出有什么方法可以通过FCMv1抑制Android系统通知的振动(即显示的通知横幅,包括应用程序未运行时)。我正在使用 在Android设备上,我可以选择在每个应用程序的基础上抑制通知上的声音,但无法在每个应用程序的基础上抑制振动。对我来说,唯一的办法就是禁用整个系统的振动,这是不可取的 我试图通过在FCM消息中这样做来解决问题使用FCM v1协议抑制Android通知中的振动,android,firebase,Android,Firebase,我看不出有什么方法可以通过FCMv1抑制Android系统通知的振动(即显示的通知横幅,包括应用程序未运行时)。我正在使用 在Android设备上,我可以选择在每个应用程序的基础上抑制通知上的声音,但无法在每个应用程序的基础上抑制振动。对我来说,唯一的办法就是禁用整个系统的振动,这是不可取的 我试图通过在FCM消息中这样做来解决问题 在SDK中,有一个选项可以不遵循默认的振动模式,并通过阵列设置特定的振动模式(请参阅)。因此: 我将默认\u振动\u计时设置为False 并将振动定时设置为[0,
- 在SDK中,有一个选项可以不遵循默认的振动模式,并通过阵列设置特定的振动模式(请参阅)。因此:
- 我将
默认\u振动\u计时设置为
False
- 并将
振动定时设置为
[0,0]
希望这不会导致振动。但是,这不起作用,并且通知会在目标设备上振动。还有别的办法吗?(我不确定stackoverflow是否是解决特定工具集问题的最佳论坛,但Google)我就是这么做的。我实现了一个自定义FirebaseService:
public class AppFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
// do something with your token
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData().size() > 0) {
// do what you want
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
}
}
}
并在清单中添加:
<service
android:name=".AppFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
在这种情况下,发送数据消息允许您保持正常通知的默认行为为什么不能将重要性设置为NotificationManager的通知推送。重要性较低?重要性较低也会降低消息的优先级,导致其中一些消息根本不会显示在系统通知中,这并非目的。它需要显示,但没有振动。因此,即使用户不希望在状态栏中显示静默通知,您也要显示通知吗?在这种情况下,您需要发送不带通知部分的数据消息,然后在onMessageReceived()中处理通知。如果应用程序未运行,则不会调用MessageReceived()并执行任何您想要的操作。我想要的是类似于Android 8及以下版本的行为——也就是说,无论我的应用程序是否正在运行,当收到通知时,操作系统会在系统托盘中显示通知(确实如此),但用户可以选择在每个应用程序的基础上禁用声音(可能通过应用程序通知设置)和/或禁用该应用程序通知的振动(在Android 8及以下版本中可能,但振动作为启动Android 9的一个选项被取消)。唯一的选择似乎是在系统范围内禁用振动。这不是真的。当应用程序位于后台时,您可以收到数据消息。您需要实现自己的服务并处理自己接收的onmessage。我过去做过。我会发布代码谢谢-但如果应用程序没有运行,这将不起作用-也就是说,被杀死。仅当应用程序仍在运行(前台或后台)时,才会调用此处理程序。这就是我不能使用数据通知的原因。如果应用程序被终止,那么它的处理程序只有在下一次返回时才会被调用。你为什么说它不会工作?即使应用程序被终止,推送通知也会起作用