在BACKGROUND中通过android AlarmClock class设置闹钟

Set alarm through android AlarmClock class in BACKGROUND

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

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

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

我通过阅读 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

中所述

If true, the application is asked to bypass any intermediate UI. If false, the application may display intermediate UI like a confirmation dialog or settings.

我自己测试过,如果使用这个EXTRA,它会在不使用任何其他应用程序的情况下提示设置闹钟的Toast。

编辑

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

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

我第一次忘记设置这个权限,令我惊讶的是它在模拟器中仍然有效,但在设备中崩溃了。