当前位置: 首页 > 知识库问答 >
问题:

如何确保即使Android应用程序关闭也会触发AlarmManager?

栾弘新
2023-03-14
public class Repository {

public static AlarmManager alarmManager;

public static void initAlarmManager(Context context){

    //start the update alarm manager
    Intent resultIntent = new Intent(context,AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0,  60 * 60 * 1000, pendingIntent);
}
public class AlarmReceiver extends BroadcastReceiver {

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

    if(Repository.ddfDb == null){
        Repository.initDdfDb(context);
    }

    if(Repository.alarmManager == null){
        Repository.initAlarmManager(context);
    }

    for(Episode episode : Repository.ddfDb.getListOfNextEpisodes()){
        Notification.showNotification(context,episode);
    }
}

因为我的AlarmManager应该一直运行,所以当引导完成时,我也让他启动。为此,我在清单文件中添加了以下内容:

<receiver android:name=".AlarmReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>

我在MainActivity的onCreate()中运行函数initAlarmManager()。因此,如果应用程序启动,AlarmManager也会启动,一切都很好。即使我通过主页按钮关闭我的应用程序或通过“在最近的应用程序之间进行更改”按钮切换到另一个应用程序,我的AlarmManager仍然会激发,尽管我的应用程序在后台,但我仍然会收到通知。

我还在AlarmReceiver中运行函数initAlarmManager()。因此,如果我重新启动我的手机,接收器会被呼叫,看到我的AlarmManager是空的,然后输入它。所以这里的一切都很好。

那么,是不是真的没有办法实现我一直运行的AlarmManager或者如果有办法,我该如何实现呢?

提前感谢!

共有1个答案

公良运锋
2023-03-14

我通过以下方式解决了这个问题:

我把我在BroadcastReceiver中做的所有操作都转移到了IntentService中。BroadcastReceiver现在所做的就是启动这个intentService。

当应用程序现在通过从最近的应用程序菜单中移开关闭时,我的通知仍然弹出。

 类似资料: