如何在我的应用程序关闭后执行 alarmmanager?

How do I make alarmmanager execute after my application has been closed?

我想让我的 alarmmanager 在我的应用程序关闭后响起。

但是现在我的代码在我的应用程序关闭后不调用 broadcastreceiver。

我在我的清单中注册了我的广播接收器。

这是设置alarmmanager的代码

final AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent=new Intent(setTimeActivity.this,autoCheckReceiver.class);
intent.setAction("com.dayo.selfcheck.autoCheckReceiver");
final PendingIntent pendingIntent=PendingIntent.getBroadcast(setTimeActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour());
calendar.set(Calendar.MINUTE, timePicker.getMinute());
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
                

这段代码是我的广播接收器。

public class autoCheckReceiver extends BroadcastReceiver {

    private String TAG="autoCR";
    @Override
    public void onReceive(Context context, Intent it) {
        Log.d(TAG,"asdf");
        Intent i = new Intent();
        i.setClassName("com.dayo.selfcheck", "com.dayo.selfcheck.MainActivity");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

这是我的清单文件。

<receiver
            android:name=".autoCheckReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.dayo.selfcheck.autoCheckReceiver"></action>
            </intent-filter>
</receiver>

谢谢!

您必须在 <receiver> 声明中指定 android:exported="true",以便 AlarmManager 启动您的 BroadcastReceiver

您不需要在 AlarmManager 上调用 cancel() 来取消 Intent,因为 AlarmManager 会自动执行此操作。

您不需要在 Intent 中为广播设置 ACTION,因为您使用的是显式 Intent(您已指定要使用的确切组件) .

您也不需要在 <receiver> 声明中提供 <intent-filter>,因为您使用的是显式广播。