通过BACKGROUND中的android AlarmClock类设置闹钟

Ind*_*ran 5 java android alarm android-intent

我正在制作一个应用程序,设置闹钟是其中一项功能。我暂时不需要该应用程序成为独立的警报管理器。因此,我使用以下代码通过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);
Run Code Online (Sandbox Code Playgroud)

它工作得很好,满足了要求。但我的应用程序会打开系统的默认时钟柱,在按下按钮时自动设置闹钟。我不需要这种事发生。我需要按下按钮,需要设置闹钟(现在也正在发生),但我不需要系统的时钟应用程序显示。我见过一些应用程序可以满足我的要求。

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

Opi*_*chs 8

我通过阅读 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);
Run Code Online (Sandbox Code Playgroud)

就像 API 中所述

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

我自己测试了一下,如果使用这个EXTRA,它会提示一个Toast,表明闹钟已设置,而无需使用任何其他应用程序。

编辑

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

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

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