为啥使用 AlarmManager.setAlarmClock() 设置时仅在三星 Android 9 设备上不显示闹钟图标?

Posted

技术标签:

【中文标题】为啥使用 AlarmManager.setAlarmClock() 设置时仅在三星 Android 9 设备上不显示闹钟图标?【英文标题】:Why Alarm icon is not shown ONLY on Samsung Android 9 devices when set with AlarmManager.setAlarmClock()?为什么使用 AlarmManager.setAlarmClock() 设置时仅在三星 Android 9 设备上不显示闹钟图标? 【发布时间】:2019-11-23 11:40:58 【问题描述】:

我使用 AlarmManager.setAlarmClock() 来设置闹钟。包括三星在内的所有设备都会发出警报,但在搭载 android 9 的三星设备上,时钟附近的小警报图标(屏幕右上角)不见了。我在这里遗漏了什么?

我知道这个问题也影响了 Google 时钟应用程序,但最近已修复。

我的代码:

val pendingAlarm = Intent(ACTION_FIRED)
    .apply 
        setClass(mContext, AlarmsReceiver::class.java)
        putExtra(EXTRA_ID, id)
        putExtra(EXTRA_TYPE, typeName)
     
     .let  PendingIntent.getBroadcast(mContext, pendingAlarmRequestCode, it, PendingIntent.FLAG_UPDATE_CURRENT) 

 val pendingShowList = PendingIntent.getActivity(
     mContext,
     100500,
     Intent(mContext, AlarmsListActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT)

 am.setAlarmClock(AlarmManager.AlarmClockInfo(calendar.timeInMillis, pendingShowList), pendingAlarm)

【问题讨论】:

手机是否使用了Good Lock? 我已经询问了一些用户 - 不涉及 Good Lock。 @YuriyKulikov,你找到解决办法了吗?遇到同样的问题,这让我发疯了。 您好,不,截至今天没有可用的修复程序。 【参考方案1】:

据我所知,我认为这是因为三星特定于 android 操作系统的实现,并且似乎与三星操作系统实现本身有关。

我发现一个线程讨论了非常相似的事情,这可能会有所帮助:(在这里找到:https://www.reddit.com/r/GalaxyS9/comments/anck2x/google_clock_no_upcoming_alarm_iconnotification/)

我在这里找到了关于同一主题的另一个讨论:(https://forums.androidcentral.com/samsung-galaxy-note-9/952204-alarm-icon.html)

似乎操作系统只在警报响起之前的特定时间显示警报指示(有些人说大约 30 分钟,也许 OP 可以测试以验证)

这个答案不是很有用,而且有点过头了,但它似乎依赖于三星设备上android OS的具体实现

【讨论】:

即将到来的警报是一个通知。我的意思是屏幕右上角的图标。它不是通知,它是 AlarmManager 显示的图标(通常)。 @YuriyKulikov 三星操作系统可能会将其视为内部通知 你混合了两件事。一种是“即将到来的警报通知”,它由某些应用程序显示,例如 Google 时钟。这是一个通知。我需要的不是通知。我需要在屏幕右上角有一个小图标,在时钟旁边,当我调用它时,它会显示(在除三星之外的所有设备上):am.setAlarmClock(AlarmManager.AlarmClockInfo(calendar.timeInMillis, pendingShowList), pendingAlarm ) 是的,这就是我要向您解释的内容。它是 android OS 的三星版本,将 UPCOMING ALARMS 作为通知处理。

以上是关于为啥使用 AlarmManager.setAlarmClock() 设置时仅在三星 Android 9 设备上不显示闹钟图标?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]

为啥我们使用 hadoop mapreduce 进行数据处理?为啥不在本地机器上做呢?

为啥 CoreGui Roblox 锁定在 DataModel 中,为啥受信任的用户不能使用 CoreScripts?

为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?

为啥刷新令牌更安全?如果刷新令牌也可能被盗,为啥我们还要使用它?

为啥使用有状态的 Web 服务是不好的编程,为啥会被允许?