gpt4 book ai didi

java - AlarmManager 无法调用我的 BroadcastReceiver

转载 作者:行者123 更新时间:2023-11-30 04:54:01 25 4
gpt4 key购买 nike

我正在尝试制作一个提醒应用程序,但我的 BroadcastReceiver 没有收到来自 AlarmManager 的任何调用。

public void setUpReminder(Reminder reminder){//Method to setup Reminder
//String content = dbhandler.getContent(reminder.getDeadline());
String content = dbhandler.getContent(reminder.getName().toString());
System.out.println(date_string);

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this,Receiver.class);
intent.putExtra("content",content);

PendingIntent intent2 = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.set(Integer.valueOf(date_string.substring(0,4)),Integer.valueOf(date_string.substring(5,7)), Integer.valueOf(date_string.substring(8,10)),Integer.valueOf(date_string.substring(11,13)),Integer.valueOf(date_string.substring(14,16)));
//calendar.set(2019,Integer.valueOf(date_string.substring(5,7)), Integer.valueOf(date_string.substring(8,10)),Integer.valueOf(date_string.substring(11,13)),Integer.valueOf(date_string.substring(14,16)));
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),intent2);
}

这里是BroadcastReceiver的代码

package com.example.reminderapp;

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

public class Receiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String content = intent.getStringExtra("content");
System.out.println(content);
Intent callRinger = new Intent(context.getApplicationContext(),ReminderActivity.class);
callRinger.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
callRinger.putExtra("content",content);
context.startActivity(callRinger);
}
}

我什至在我的 AndroidManifest.xml 中添加了 Receiver

 <receiver android:process=":remote"  android:name=".Receiver" />

请告诉我我做错了什么。

最佳答案

当你这样做时:

calendar.set(Integer.valueOf(date_string.substring(0,4)),
Integer.valueOf(date_string.substring(5,7)),
Integer.valueOf(date_string.substring(8,10)),
Integer.valueOf(date_string.substring(11,13)),
Integer.valueOf(date_string.substring(14,16)));

我假设您的 date_string 类似于 2019-12-18T08:55。如果是这种情况,则您的闹钟没有响起的原因是 month 字段。 Calendar 类期望月份字段从零开始(即:值 0-11),但您的 date_string 将月份字段设置为从一开始(即:1 -12).

要验证这个理论,请尝试对值进行硬编码并测试警报是否触发,例如:

calendar.set(2019,11,31,09,05)

Tnese values 会将 Calendar 设置为 2019.12.31 at 09:05(注意月份字段比实际月份数字少一)

关于java - AlarmManager 无法调用我的 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59517545/

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