通过背景中的android AlarmClock 类设置闹钟

Posted

技术标签:

【中文标题】通过背景中的android AlarmClock 类设置闹钟【英文标题】:Set alarm through android AlarmClock class in BACKGROUND 【发布时间】:2016-12-07 04:51:26 【问题描述】:

我正在制作一个应用程序,设置闹钟是其中一项功能。我现在不需要该应用程序成为独立的警报管理器。因此,我通过AlarmClock 类的 ACTION_SET_ALARM 使用以下代码设置警报:

Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
i.putExtra(AlarmClock.EXTRA_HOUR, hour);
i.putExtra(AlarmClock.EXTRA_MINUTES, minute);
i.putExtra(ALarmClock.EXTRA_MESSAGE, "Good Morning");
startActivity(i);

它可以很好地满足要求。但是我的应用程序会打开系统的默认时钟,在按下按钮时自动设置闹钟。我不需要这种情况发生。 我需要按下按钮,需要设置闹钟(现在也正在发生),但我不需要显示系统的时钟应用程序。我已经看到一些应用程序可以满足我的要求。

请帮助我在后台设置闹钟/设置闹钟后不要打开时钟应用程序。 希望我已经清楚地表达了我的问题。

【问题讨论】:

直到现在我还没有使用 AlarmClock,但据我在 API 中看到的,这是默认行为。您必须创建一个基于该意图打开的活动。也许你可以做一个简单的活动,如果你不想打开,直接关闭它。developer.android.com/reference/android/provider/… 希望对您有所帮助! AlarmManager @Opiatefuchs 我尝试关闭活动并返回到我按下按钮设置警报的活动。但是一旦执行了上述行,其余代码就会超出范围,因为控制权会转移到完全不同的应用程序(系统的默认时钟应用程序)。 @zeeali 谢谢你的分享。但是该线程建议使用我现在正在做的alarmManager。建议的代码对于使用广播接收器使应用程序成为独立的警报应用程序很有用(在警报时间启动活动、关闭、打盹等)。我现在不想引入所有这些功能。现在,我需要通过 android 系统本身设置按钮点击警报。并让系统处理取消、打盹等,但在设置闹钟后打开时钟应用程序(通过按钮按下)。 【参考方案1】:

我通过阅读 API 找到了一种方法 :)。您必须使用 EXTRA_SKIP_UI 设置为 true。

    Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
    i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    i.putExtra(AlarmClock.EXTRA_HOUR, hour);
    i.putExtra(AlarmClock.EXTRA_MINUTES, minute);
    i.putExtra(AlarmClock.EXTRA_MESSAGE, "Good Morning");
    startActivity(i);

如 API 中所述

如果为 true,则要求应用程序绕过任何中间 UI。如果 false,应用程序可能会显示中间 UI,如确认 对话框或设置。

我自己测试过,如果使用这个EXTRA,它会提示一个Toast,没有使用任何其他应用程序设置了闹钟。

编辑

为了完整起见,您需要添加权限:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"></uses-permission>

我首先忘记设置此权限,令我惊讶的是它在模拟器中仍然有效,但在设备中崩溃了。

【讨论】:

啊!我想知道我在阅读文档时是如何错过的。谢谢你。成功了!

以上是关于通过背景中的android AlarmClock 类设置闹钟的主要内容,如果未能解决你的问题,请参考以下文章

Android AlarmClock() ,设置闹钟日期

Android AlarmClock ACTION_SET_ALARM 意图产生异常

与 Xcode 一样,Android 中的按下按钮背景更改

如何运行 Android 默认闹钟应用程序?

使用意图设置闹钟(如闹钟)

是否有用于删除警报的 Android API