首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android获取活动告警列表

Android获取活动告警列表
EN

Stack Overflow用户
提问于 2014-02-22 12:08:31
回答 3查看 27.4K关注 0票数 36

有没有办法在我们的应用程序programmatically.Just中以编程的方式获得安卓设备中所有活动警报的列表,给我指出一些可以提供帮助的链接,我基本上是想让用户能够查看他设备中的所有警报,所以我想获得设备中所有活动警报的列表。

EN

回答 3

Stack Overflow用户

发布于 2016-03-02 20:19:39

不,AFAIK你不能以编程的方式做到这一点,所以在UI中向用户显示信息是不可行的。

但是,作为您自己的参考,您可以通过以下方式转储报警数据

代码语言:javascript
复制
adb shell dumpsys alarm

为此,您不需要root权限。

但你从上面得到的东西可能会让人非常困惑。为了完全理解这个转储,你应该看看morphatic的答案here

票数 27
EN

Stack Overflow用户

发布于 2017-06-21 17:55:27

如果你指的是活跃的警报,在设备的闹钟应用程序中的警报,我认为你可以。尝试从Here中检出这些方法。

然而,如果你想在你的设备上看到由AlarmManager创建的所有报警,那么不幸的是,你不能通过编程来实现。

但是,您可以在文本文件中查看转储数据,如下所示:

代码语言:javascript
复制
adb shell dumpsys alarm > dump.txt
票数 11
EN

Stack Overflow用户

发布于 2020-11-30 01:04:06

我刚用我的新手机遇到了这个问题。我从一部旧手机上迁移了数据,事后看来,我认为发生的情况是,一个不活跃的警报应用突然激活,或者在迁移后启用了该应用中的禁用警报。不管怎么说,每天8:30突然响起了一个我无法辨认的闹钟。

下面概述我是如何解决这个问题的。如果您不关心这一点,请滚动到末尾的TL;DR。

故障排除流程

我使用的过程是使用其他答案中描述的adb。然而,如果你这样做,你很快就会不知所措。给我的输出是一个2,000+行输出,在第260行附近有一条简短的消息:

代码语言:javascript
复制
Pending alarm batches: 130

这是因为这些不是你和我所说的警报。相反,它们是要求在特定时间被唤醒的各种应用程序(例如,要求立即被唤醒以检查新邮件的邮件应用程序)。所以我猜是警报,但对于应用程序来说。我所做的是首先确定一个“适当的”警报看起来是什么样子。我已经在官方的闹钟应用程序中启用了两个闹钟,它们在过去24小时内响起。所以我首先运行:

代码语言:javascript
复制
adb shell dumpsys alarm > two-alarms.txt

然后我禁用了两个警报中的一个,并运行:

代码语言:javascript
复制
adb shell dumpsys alarm > one-alarm.txt

然后,我比较了这两个输出,并注意到大多数差异与时间戳有关(这是有道理的--它们在不同的时间运行,并且输出主要集中在“我应该从现在开始做X毫秒后做什么”)。例如,我会看到这样的diff输出:

代码语言:javascript
复制
287c293
<       type=3 expectedWhenElapsed=+1m51s619ms expectedMaxWhenElapsed=+1m51s619ms whenElapsed=+1m51s619ms maxWhenElapsed=+1m51s619ms when=+1m51s619ms
---
>       type=3 expectedWhenElapsed=+1m48s727ms expectedMaxWhenElapsed=+1m48s727ms whenElapsed=+1m48s727ms maxWhenElapsed=+1m48s727ms when=+1m48s727ms

我重新运行了diff,过滤掉了包含type=的行

代码语言:javascript
复制
$ diff -I 'type=' two-alarms.txt one-alarm.txt|less

这仍然包含许多噪音,但相关部分更容易定位。例如,我发现的第一个实质性差异是:

代码语言:javascript
复制
561c567,573
< Batch{b03e994 num=1 start=1851593838 end=1851593838 flgs=0x1}:
---
> Batch{849c837 num=1 start=1851593838 end=1851593838 flgs=0x5}:
>     RTC_WAKEUP #0: Alarm{e855db5 statsTag *walarm*:com.google.android.gms.reminders.notification.ACTION_REFRESH_TIME_REMINDERS type 0 when 1606626000000 com.google.android.gms}
>       tag=*walarm*:com.google.android.gms.reminders.notification.ACTION_REFRESH_TIME_REMINDERS
>       type=0 expectedWhenElapsed=+4h30m42s565ms expectedMaxWhenElapsed=+4h30m42s565ms whenElapsed=+4h30m42s565ms maxWhenElapsed=+4h30m42s565ms when=2020-11-29 00:00:00.000
>       window=0 repeatInterval=0 count=0 flags=0x5
>       operation=PendingIntent{543c4a: PendingIntentRecord{97867bb com.google.android.gms startService}}
> Batch{3f531a4 num=1 start=1851593838 end=1851593838 flgs=0x1}:

这显然是我设置的一个提醒(或者可能是一个通用的“唤醒我来检查提醒”警报,谷歌提醒已经设置了它来检查提醒)。

再深入研究一下输出,我们会发现:

代码语言:javascript
复制
1027c1033,1039
<       type=0 expectedWhenElapsed=+1d13h20m45s459ms expectedMaxWhenElapsed=+1d13h20m45s459ms whenElapsed=+1d13h20m45s459ms maxWhenElapsed=+1d13h20m45s459ms when=2020-11-30 08:50:00.002
---
>       type=0 expectedWhenElapsed=+1d13h20m42s566ms expectedMaxWhenElapsed=+1d13h20m42s566ms whenElapsed=+1d13h20m42s566ms maxWhenElapsed=+1d13h20m42s566ms when=2020-11-30 08:50:00.002
>       window=0 repeatInterval=0 count=0 flags=0x9
>       operation=PendingIntent{89757d2: PendingIntentRecord{127f2fd com.lge.clock broadcastIntent}}
> Batch{39e90a3 num=1 start=2045693838 end=2045693838 flgs=0x9}:
>     RTC_WAKEUP #0: Alarm{ba76fa0 statsTag *walarm*:com.lge.clock.show_quick_dismiss_noti type 0 when 1606820100000 com.lge.clock}
>       tag=*walarm*:com.lge.clock.show_quick_dismiss_noti
>       type=0 expectedWhenElapsed=+2d10h25m42s565ms expectedMaxWhenElapsed=+2d10h25m42s565ms whenElapsed=+2d10h25m42s565ms maxWhenElapsed=+2d10h25m42s565ms when=2020-12-01 05:55:00.000

因此,官方的闹钟应用程序似乎是com.lge.clock,这很有道理--这是一部LG手机。让我们在原始输出中查找它:

代码语言:javascript
复制
  u0a194:com.lge.clock +21s656ms running, 61 wakeups:
    +12s50ms 11 wakes 11 alarms, last -1d10h37m18s647ms:
      *walarm*:com.lge.clock.alarmclock.internal.for.lmk
    +8s338ms 17 wakes 17 alarms, last -1d12h42m26s219ms:
      *walarm*:com.lge.clock.show_quick_dismiss_noti
    +4s272ms 11 wakes 11 alarms, last -1d10h37m18s647ms:
      *walarm*:com.lge.clock.alarmclock.internal
    +1s2ms 11 wakes 11 alarms, last -1d10h38m15s71ms:
      *walarm*:com.lge.sizechangable.weather.action.force.update.currentonly
    +996ms 11 wakes 11 alarms, last -1d10h37m18s647ms:
      *walarm*:indicator

在这里,我们可以看到这个应用程序已经有了一天,10小时37分钟和一些秒和毫秒之前的一些警报(-1d10h37m18s647ms)。这是有道理的。这个输出是在18:32 (6:32 55)运行的,我的一个真正的闹钟设置在7:55。认识到我们如何识别“最后一次触发”的时间,我们现在可以搜索虚幻的8:30警报。8:30距离报告时间大约是一天10小时零2分钟,因此我们搜索-1d10h2m并得到:

代码语言:javascript
复制
  u0a235:net.fredericosilva.mornify +14s944ms running, 20 wakeups:
    +14s944ms 20 wakes 20 alarms, last -1d10h2m26s3ms:
      *walarm*:net.fredericosilva.mornify/.alarm.AlarmBroadcastReceiver

嗯..。什么是net.fredericosilva.mornify?快速搜索将在Mornify Play Page中显示。你瞧,瞧!我让Mornify安装了那个警报器。我完全忘记了我以前测试过这个应用程序,在我确定它对我不起作用后,我忘了删除它。问题解决了!

TL;DR

步骤1:

运行报警输出:

代码语言:javascript
复制
adb shell dumpsys alarm > my-alarms.txt

第2步:

找出从现在到最后一次虚幻警报运行的相对时间。例如,如果运行输出的时间是6: 32 : 18 to,而闹钟在昨天早上7点响起,那么差异就是6:32 to 7 a+24小时,或者1天11小时32分18秒(这里有一个电子表格可以方便地为您计算时间)。

第3步:

将时间差重新格式化为-DdHhMm,其中D是天数,H是小时数,M是分钟数。我们将在这里忽略秒,以避免时钟漂移的问题。在前面的示例中,这将是-1d11h32m

第4步:

在步骤1的输出中搜索此字符串。如果找不到,请在字符串中减去2,或在字符串中添加1分钟以校正时钟差异。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21949522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档