gpt4 book ai didi

android - 多个 Intent ,但广播接收器只调用一次

转载 作者:搜寻专家 更新时间:2023-11-01 09:44:40 40 4
gpt4 key购买 nike

我想在特定时刻及时执行数据库操作,并结合广播接收器使用警报管理器和未决 Intent 。

这可行,但是当同一个广播接收器必须在短时间内(例如一分钟内)接收多个 Intent 时,onreceive() 只会被调用一次。

  Intent intent2 = new Intent(this, CustomBroadcastReceiver.class);
intent2.putExtra("taskId", currentTask.getTaskId());
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +
((long) dataSource.fetchTask(task.getTaskId()).getTaskTime() * 60 * 1000), pendingIntent1);

和broadcastreceiver的onreceive方法:

  @Override
public void onReceive(Context context, Intent intent) {
dataSource = new DataSourceClass(context);
dataSource.open();

int taskId = intent.getIntExtra("taskId", 0);

dataSource.setTaskStatus(3, taskId);
dataSource.setCatInActive(dataSource.fetchTask(taskId).getTaskCategory())
}

对我做错了什么有什么建议吗?

最佳答案

您可以在 KITKAT 之后使用 setExact() 而不是 set():

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}

getBroadcast() 中的第二个参数是 requestCode,它就像一个 ID,因此,每个 PendingIntent 都应该有一个唯一的 requestCode(又名 ID)。您所有的 pendingIntent1 都有相同的 requestCode (0),我不确定这是否是导致问题的原因,但可能是这样,您可以像这样为每个 pendingIntent 设置不同的 requestCode:

    int i = sharedPrefs.getInt("i", 0);

Intent intent2 = new Intent(this, CustomBroadcastReceiver.class);
intent2.putExtra("taskId", currentTask.getTaskId());
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, i++, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() +
((long) dataSource.fetchTask(task.getTaskId()).getTaskTime() * 60 * 1000), pendingIntent1);

sharedPrefs.edit.putInt("i", i).apply();

关于android - 多个 Intent ,但广播接收器只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542256/

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