AlarmManager 未按预期正常工作

问题描述 投票:0回答:1

我想创建一个每天运行特定代码的应用程序。 我在 stackOverflow 中询问,他们告诉我警报管理器是正确的方法。所以我用了它并想出了这个。

AndroidManifest.xml(内部

<application>

<receiver android:name=".DailyTaskBroadcastReceiver" />

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    scheduleDailyTask(this);
}

public void scheduleDailyTask(Context context) {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, DailyTaskBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
                PendingIntent.FLAG_NO_CREATE | PendingIntent.FLAG_IMMUTABLE); //from FLAG_NO_CREATE to FLAG_UPDATE_CURRENT

        //Made it repeat every minute for testing
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 1);

        // Set the alarm to repeat every minute
        alarmManager.setRepeating(
                AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(),
                60 * 1000, // 60 seconds * 1000 milliseconds
                pendingIntent );
    }

DailyTaskBroadcastReceiver.java

public class DailyTaskBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "bomboclat minute has passed", Toast.LENGTH_SHORT).show();
        storage.createNewDailyCSV(context);
    }
}

现在,最初一切都运行良好。即使应用程序没有在我的手机上运行,代码也会运行,并且吐司每分钟都会工作。但是当我再次运行该应用程序时enter image description here它现在不起作用了。

我不知道出了什么问题,我迷失了。

java android alarmmanager
1个回答
0
投票

在代码中进行以下更改

 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
            PendingIntent.FLAG_NO_CREATE);

    if (pendingIntent == null) {
        // Alarm is not set, set it
        pendingIntent = PendingIntent.getBroadcast(context, 0, intent,
            PendingIntent.FLAG_IMMUTABLE);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 1);

        // Set the alarm to repeat every minute
        alarmManager.setRepeating(
                AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(),
                60 * 1000, // 60 seconds * 1000 milliseconds
                pendingIntent );
    } else {
        // Alarm is already set
    }

记得在 AndroidManifest.xml 文件中声明 DailyTaskBroadcastReceiver:

<receiver android:name=".DailyTaskBroadcastReceiver" />
© www.soinside.com 2019 - 2024. All rights reserved.