没有应用程序时不会触发警报 运行

alarm not triggering when app is no running

我正在设置每日闹钟。如果应用程序在闹钟时间 运行,它会工作,但如果应用程序不是 运行,它就不会工作。 这就是我在清单中声明接收者的方式:

<receiver android:name="com.myAppPackage.alarm.AlarmReceiver"
        android:enabled="true"
        android:exported="true"/>

Studio 警告我:导出的接收器不需要权限。

是的,我没有向接收者添加 android:permission 和 Intent,并且 application 部分没有任何 permission 标签。

这是广播接收器:

    package com.myAppPackage.alarm;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;

    import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;

    public class AlarmReceiver extends BroadcastReceiver {

    public AlarmReceiver(){}

    @Override
    public void onReceive(Context context, Intent intent) {

        final Intent syncIntent = new Intent(context, AlarmActivity.class);

        syncIntent.addFlags(FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(syncIntent);

    }
}

按以下方法配置警报(在本例中配置为在 13:48 设置每天不准确的时间):

public static void configureDailySync(Context context) {

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Intent alarmIntent = new Intent(context, AlarmReceiver.class);

    PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());

    final int hourOfDay = 13;
    final int minuteOfHour = 48;

    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minuteOfHour);

    alarmManager.setInexactRepeating(
            AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY,
            alarmPendingIntent);
}

非常欢迎任何帮助!谢谢!!

新闻:越来越近了……如果我在 MainActivity onCreate() 方法中复制闹钟设置代码,它就会起作用!这是我复制的代码:

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Intent alarmIntent = new Intent(this, AlarmReceiver.class);

    PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());

    final int hourOfDay = 13;
    final int minuteOfHour = 48;

    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minuteOfHour);

    alarmManager.setInexactRepeating(
            AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY,
            alarmPendingIntent);

当在 MainActivity 的 onCreate() 中如上所述创建警报时,即使在应用程序关闭时它也会触发... 但是当我像这样从 MainActivity 调用方法时:

MyAppAccount.configureDailySync(this);

没用! MyAppAccount 是一个普通的 class 没有扩展任何东西......我试图让 MyAppAccount 扩展 AppCompatActivity 以防它重要但没有...... 哦……好吧……上面的尝试在 MainActivity 的 onCreate() 方法中执行闹钟设置似乎并不总是有效……最令人费解的是! :-(

已解决:它与编码无关!!问题是我关闭应用程序的方式。使用 Android Studio 的停止按钮关闭应用程序时,未设置警报。当从 phone 关闭应用程序时,例如使用后退按钮和/或从应用程序列表中删除应用程序(使用方形按钮),然后闹钟会起作用!

为什么?不知道...