- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个配置为通过 Firebase 接收推送通知的 Android 应用程序,当手机处于打盹模式时,我遇到了让它工作的问题。
应用程序正确接收推送通知,无论它是在前台还是在后台。为此,我只使用 data
无论应用程序的状态如何,推送通知中的字段都能够处理传入的任何内容。
我已经实现了接收通知的服务,如下所示:
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(p0: RemoteMessage?) {
Timber.d("Push notification received")
super.onMessageReceived(p0)
when (p0!!.data["ch"]) {
NotificationType.VoIP.channelType() -> handleVoIPNotification(p0.data)
NotificationType.Push.channelType() -> handlePushNotification(p0.data)
}
}
}
ch
属性定义了通知的类型并从我的后端发送:由于我的应用程序具有视频通话功能,因此当有人调用后端时,将发送带有
ch = voip
的通知并将消息优先级设置为
high
,如记录
in the Firebase guide .
handleVoIPNotification
函数包含以下内容:
private fun handleVoIPNotification(data: Map<String, String>) {
val gson = Gson()
val jsonElement = gson.toJsonTree(data)
try {
val voIPNotification = gson.fromJson(jsonElement, VoIPNotification::class.java)
Timber.i("VoIP Notification received: %s", voIPNotification.action.name)
// pass the incoming call data to the Call Manager.
CallManager.getInstance().handleNotification(voIPNotification)
} catch (exc: Exception) {
Timber.e(exc)
Timber.i("Invalid VoIP notification received: %s", data)
}
}
currentCall
的属性。并终止:
this.currentCall.apply {
token = notification.token
roomName = notification.room
username = notification.nickname
status.value = Call.CallStatus.Ringing
}
status
属性是
BehaviorSubject
另一个对象观察到的实现,该对象对调用状态的变化使用react:
currentCall.status.observable
.distinctUntilChanged()
.subscribe {
Timber.d("Call status changed: $it")
when (it) {
Call.CallStatus.Ringing -> {
this.showIncomingCallNotification()
}
Call.CallStatus.Declined, Call.CallStatus.Ended -> {
this.dismissIncomingCallNotification()
this.refreshIncomingCallActivity()
}
Call.CallStatus.Connecting -> {
this.dismissIncomingCallNotification()
this.presentOngoingCallActivity()
}
else -> { /* ignored */ }
}
}.disposedBy(this.disposeBag)
showIncomingCallNotification
如下:
fun showIncomingCallNotification() {
val intent = Intent(Intent.ACTION_MAIN, null).apply {
flags = Intent.FLAG_ACTIVITY_NO_USER_ACTION or Intent.FLAG_ACTIVITY_NEW_TASK
setClass(configuration.context, configuration.incomingCallActivityType.java)
}
val pendingIntent = PendingIntent.getActivity(configuration.context, configuration.requestCode, intent, 0)
val builder = NotificationCompat.Builder(configuration.context, configuration.notificationChannel)
.setOngoing(true)
.setContentIntent(pendingIntent)
.setFullScreenIntent(pendingIntent, true)
.setSmallIcon(configuration.notificationIcon)
.setContentTitle(currentCall.username)
.setContentText(configuration.context.getString(configuration.notificationText))
val notification = builder.build()
notification.flags = notification.flags or Notification.FLAG_INSISTENT
configuration.notificationsManager.getSystemNotificationManager().notify(0, notification)
}
onMessageReceived
直到我打开屏幕才调用函数。
FCM is optimized to work with Doze and App Standby idle modes by means of high-priority FCM messages. FCM high-priority messages let you reliably wake your app to access the network, even if the user’s device is in Doze or the app is in App Standby mode. In Doze or App Standby mode, the system delivers the message and gives the app temporary access to network services and partial wakelocks, then returns the device or app to the idle state.
最佳答案
事实证明,这不是 FCM 问题,但实际上是 Azure 通知中心(我们的后端用于发送通知的系统)的问题。
如果您在使用高优先级消息、Azure 通知中心和打盹模式时遇到问题,请参阅此问题的所选答案:Setting Fcm Notification Priority - Azure Notification Hub
关于android - 使用 Firebase 处理后台推送通知,支持 Doze,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808033/
在 Android“N”中,Doze 已扩展为“Doze on the Go”。 我正在寻找一种方法来检测设备何时进入和离开这些新的轻度 sleep IDLE 和 IDLE_MAINTENANCE 状
我有一个定期运行以保持网络连接有效的方法。在打瞌睡模式下,我想禁止它定期运行并在维护窗口期间只运行一次。当设备退出 Doze 时,我希望再次定期调用该方法。我怎样才能做到这一点? 我已经注册了一个接收
我正在开发一个应用程序,在该应用程序中我必须以固定的时间间隔(比如说 2 分钟后)执行一些重复任务,即使在打瞌睡模式下也应该完成。我的观察如下 - 使用闹钟(使用 RTcflags)执行重复任务不准确
Android 6 上新的Doze 模式会禁用几乎所有有用的后台 Activity 。我有一个应用程序,它会定期唤醒设备(即使没有锁定屏幕),保持部分唤醒锁定,进行一些扫描并将其报告给互联网。它不是
我有与 Android 打瞌睡模式(Android N [深度打瞌睡] 和 M)相关的问题。根据 Android 官方文档,一旦设备进入休眠模式,它就会停止通过 GPS 或网络接收位置更新。 要退出休
随着 Android M 中 Doze 的引入,Android 在 Doze 期间对后台执行的限制越来越多。有人可以详细说明在扩展 Android 自己的服务时是否同样适用。比如Notificatio
我的应用程序每 15 分钟向我的服务器发送一次 GPS 位置数据。此功能是应用程序的核心目的。 但是,当手机关机且不使用时,GPS 记录会逐渐消失。 GPS 记录之间的时间有一段时间是 15 分钟,然
背景 Android 6 引入了一种称为“Doze”的内置机制,以便在设备休眠时更好地处理电池。 问题 问题是,我不明白它到底是如何工作的,以及应用程序应该如何改变以处理这种新机制(如果有的话)。 显
是否有任何文档说明 Android 中打瞌睡模式维护窗口的频率?我读过不同的东西,但没有官方的。有人说它是 1、2、4、6 小时,然后维护窗口每 6 小时重新出现一次,但在 android 文档中找不
Doze 模式如何影响注册的听众? 如果可能的话,我还想知道它是如何影响传感器监听器的。 我的问题是我的 WatchFaceService 在 list 中具有唤醒锁定权限。 watchFace 每分
我正在测试我的新应用程序,但我遇到了问题 isIgnoringBatteryOptimizations 特征。 当应用程序启动时,它会检查该应用程序是否被列入 Doze 白名单。如果没有,它会向用户显
我正在尝试针对 Doze 和 AppStandBy 优化我们的应用程序,并已实现测试应用程序以了解系统在使用不同后台调度程序时的行为。 但是,我对使用 AlarmManager 和 Observabl
对于 DOZE 模式测试,我正在 Android 6.0 上开发一个示例 GCM 应用。 如前所述,在 DOZE 模式下,设备不会为普通优先级 GCM 唤醒。我想检查一下。 根据文档 (https:/
我正在尝试学习 Android 7.0,但我看到了这条评论。 “当设备使用电池供电且屏幕关闭一段时间后,设备会进入休眠状态并应用第一个限制子集:它会关闭应用程序网络访问,并推迟作业和同步" 我不是很明
我稍微修改了这个应用程序:https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler 它使用 setExactAndAllowW
引用了这个库https://github.com/iammert/RadioPlayerService我有播放/暂停 radio 的代码 if (!mRadioManager.isPlaying
我正在使用 Android Studio 并尝试在使用打盹模式时测试我的应用。我已经阅读了一些链接(包括 the android documentation about doze mode )。但是,
我有一个配置为通过 Firebase 接收推送通知的 Android 应用程序,当手机处于打盹模式时,我遇到了让它工作的问题。 应用程序正确接收推送通知,无论它是在前台还是在后台。为此,我只使用 da
我有一个前台通知服务,它使用 ActivityRecognition 持续监控用户的操作,并在用户状态发生变化时将它们写入 AWS。它工作了一段时间。但是我注意到当用户空闲时间较长时,例如用户整夜 s
当我使用 Spotify Android SDK 播放音乐并且打瞌睡时,音乐停止播放,因为应用程序失去了网络连接。有办法解决吗? 我能想到的唯一方法是要求用户使用 ACTION_REQUEST_IGN
我是一名优秀的程序员,十分优秀!