我的警报应用程序不会显示警报通知或播放警报声音吗?

时间:2019-07-21 20:28:33

标签: java android alarmmanager alarm

我正在使用AlarmManager发出警报。我不确定为什么不起作用,随时请求更多代码。预先谢谢你。

MainActivity.java

button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                    if (isChecked) {
                        alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTimeInMillis(System.currentTimeMillis());
                        int y = calendar.get(Calendar.YEAR);
                        int mon = calendar.get(Calendar.MONTH);
                        int d = calendar.get(Calendar.DAY_OF_MONTH);
                        if (ampm.equals("pm")){
                            h=h+12;
                        }
                        calendar.set(y, mon, d, h, m);
                        alarmIntent =PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
                        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * intervalMinute, alarmIntent);
                    } else {
                        if (alarmMgr!=null) {
                            alarmMgr.cancel(alarmIntent);
                        }
                    }

没有错误。

1 个答案:

答案 0 :(得分:0)

setRepeating等效于API级别19+上的setInexactRepeating。从文档中:

  

注意:从API 19开始,所有重复警报都是不精确的。如果你的   应用程序需要精确的交付时间,因此必须使用一次   确切的警报,每次重新安排的时间如上所述。遗产   targetSdkVersion早于API 19的应用程序   继续保持所有警报,包括重复警报,   视为精确。

您需要根据目标API级别调用setsetExact或(也许)setAlarmInfo,并手动安排重复警报。

此外,请仔细检查您设置下一个闹钟时间的逻辑,因为现在看来我太复杂了。您可以这样做:

final Calendar c = Calendar.getInstance();
c.add(1, Calendar.DAY_OF_MONTH); //Just an example
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);

我已经在GitHub上发布了一个警报应用,该应用也可能有用(link)。

相关问题