gpt4 book ai didi

android - 仅在应用程序运行时收到警报

转载 作者:行者123 更新时间:2023-11-29 16:12:16 27 4
gpt4 key购买 nike

我有一个 Android 应用程序,允许用户添加一个警报来记录他们的位置。例如,每天早上 8 点我都想记录自己的位置。当收到警报时,它会启动一个服务来获取用户的位置并将其保存到数据库中。该功能在应用程序运行时(在后台或前台)运行良好。

问题是,如果我进入任务管理器并强制关闭应用程序,闹钟似乎并没有响起。这很重要,因为用户可以重启手机并终止应用。

这里是设置闹钟的方法:

private void setNewAlarm(int hour, int minute, int id) {
Intent alarmIntent = new Intent(AutoLoggerActivity.this, AlarmReciever.class);
alarmIntent.putExtra(Constants.ALARMID_FIELD_NAME, id);
PendingIntent sender = PendingIntent.getBroadcast(AutoLoggerActivity.this, id, alarmIntent, 0);

Calendar alarmCal = Calendar.getInstance();
alarmCal.set(Calendar.HOUR_OF_DAY, hour); // set user selection
alarmCal.set(Calendar.MINUTE, minute); // set user selection
alarmCal.set(Calendar.SECOND, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(), 120000, sender);
}

这是广播接收器:

public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
int alarmId = bundle.getInt(Constants.ALARMID_FIELD_NAME);
Toast.makeText(context, "Alarm Running: ID = " + alarmId, Toast.LENGTH_LONG).show();
Log.d(TAG, "AlarmReceiver: onRecieve. ID = " + alarmId);

Intent serviceIntent = new Intent(context, LocationRecordingService.class);
serviceIntent.putExtra(Constants.ALARMID_FIELD_NAME, alarmId);
context.startService(serviceIntent);
}
}

知道为什么会这样吗?

最佳答案

这实际上是 Android 操作系统的一个设计特点,不是您可以规避的。处于“停止”状态的应用程序无法接收任何广播。它只有在两种情况下才会处于这种状态:

  1. 应用程序在启动之前首次安装时
  2. 当用户主动进入“设置”并强制关闭时

The problem is, the alarm doesn't seem to go off if I go into the task manager and force the app to close. This is important as the user could reboot their phone and kill the app.

这并不完全正确,因为如果设备重新启动,则应用程序不会被视为处于“停止”状态。但是,警报不会持续重启,因此您的应用程序需要在设备启动时监听系统广播的 ACTION_BOOT_COMPLETED,以便您可以重新安排任何待处理的警报。

如果用户主动终止您的应用,您必须尊重他们的选择。

关于android - 仅在应用程序运行时收到警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com