立即触发通知消息 - Android
Notification Message Instantly Fired - Android
我正在制作一个将药物数据存储在 SQLite 数据库中的应用程序,以便在需要服药时向用户发送通知。
我已经创建了 BroadcastReceiver
class 并管理了通知 Intent
。
当我在数据库中添加时间 (hh:mm:ss) 时会调用 Calendar.set()
函数,但问题是每次我在 TimePicker
对话框中设置时间时,都会立即发送通知,无论何时。
这是 activity 中的 setAlarm
函数,我在其中存储时间和其他内容:
public void setAlarm()
{
String mName = NameFld.getText().toString();
String mFormat = FormatSpn.getSelectedItem().toString();
Calendar calendar = Calendar.getInstance();
char[] sTime = TimeBtn.getText().toString().toCharArray();
if(sTime[0] == '0')
{
calendar.set(Calendar.HOUR_OF_DAY, sTime[1]);
}
else
{
String tmp = "";
tmp += sTime[0];
tmp += sTime[1];
int hour = Integer.parseInt(tmp);
calendar.set(Calendar.HOUR_OF_DAY, hour);
}
if(sTime[3] == '0')
{
calendar.set(Calendar.MINUTE, sTime[4]);
}
else
{
String tmp = "";
tmp += sTime[3];
tmp += sTime[4];
int minute = Integer.parseInt(tmp);
calendar.set(Calendar.MINUTE, minute);
}
calendar.set(Calendar.SECOND, 0);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("mName", mName);
intent.putExtra("mFormat", mFormat);
sendBroadcast(intent);
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE);
aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
下面两行代码:
String mName = NameFld.getText().toString();
String mFormat = FormatSpn.getSelectedItem().toString();
只需从 EditText
字段中获取数据,然后将其放入 Intent
以在通知构建中管理它们。
为了将时间设置为 Calendar
变量,我从包含时间字符串本身的 TimeBtn
按钮中获取文本。我只是在从 TimePicker
对话框中选择时间时设置它。
然后我将其转换为 char
数组以拆分小时和分钟值,并将它们放入 calendar.set()
函数中,区分值是否以 0 开头以避免在将它们转换为时进行八进制转换int
.
设置时间后,AlarmReceiver
class(扩展 BroadcastReceiver
)执行以下操作:
@Override
public void onReceive(Context context, Intent intent) {
String mName = intent.getStringExtra("mName");
String mFormat = intent.getStringExtra("mFormat");
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
builder.setTicker("It's pill time!");
builder.setContentTitle(mName);
builder.setContentText(mFormat);
builder.setSmallIcon(R.drawable.ic_launcher);
Notification notification = builder.build();
NotificationManager nManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
nManager.notify(0, notification);
}
没有编译错误,我只是找不到问题。
在此先感谢您的帮助!
尝试替换
aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
和
aManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+calendar.getTimeInMillis(), pIntent);
我正在制作一个将药物数据存储在 SQLite 数据库中的应用程序,以便在需要服药时向用户发送通知。
我已经创建了 BroadcastReceiver
class 并管理了通知 Intent
。
当我在数据库中添加时间 (hh:mm:ss) 时会调用 Calendar.set()
函数,但问题是每次我在 TimePicker
对话框中设置时间时,都会立即发送通知,无论何时。
这是 activity 中的 setAlarm
函数,我在其中存储时间和其他内容:
public void setAlarm()
{
String mName = NameFld.getText().toString();
String mFormat = FormatSpn.getSelectedItem().toString();
Calendar calendar = Calendar.getInstance();
char[] sTime = TimeBtn.getText().toString().toCharArray();
if(sTime[0] == '0')
{
calendar.set(Calendar.HOUR_OF_DAY, sTime[1]);
}
else
{
String tmp = "";
tmp += sTime[0];
tmp += sTime[1];
int hour = Integer.parseInt(tmp);
calendar.set(Calendar.HOUR_OF_DAY, hour);
}
if(sTime[3] == '0')
{
calendar.set(Calendar.MINUTE, sTime[4]);
}
else
{
String tmp = "";
tmp += sTime[3];
tmp += sTime[4];
int minute = Integer.parseInt(tmp);
calendar.set(Calendar.MINUTE, minute);
}
calendar.set(Calendar.SECOND, 0);
Intent intent = new Intent(this, AlarmReceiver.class);
intent.putExtra("mName", mName);
intent.putExtra("mFormat", mFormat);
sendBroadcast(intent);
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE);
aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
下面两行代码:
String mName = NameFld.getText().toString();
String mFormat = FormatSpn.getSelectedItem().toString();
只需从 EditText
字段中获取数据,然后将其放入 Intent
以在通知构建中管理它们。
为了将时间设置为 Calendar
变量,我从包含时间字符串本身的 TimeBtn
按钮中获取文本。我只是在从 TimePicker
对话框中选择时间时设置它。
然后我将其转换为 char
数组以拆分小时和分钟值,并将它们放入 calendar.set()
函数中,区分值是否以 0 开头以避免在将它们转换为时进行八进制转换int
.
设置时间后,AlarmReceiver
class(扩展 BroadcastReceiver
)执行以下操作:
@Override
public void onReceive(Context context, Intent intent) {
String mName = intent.getStringExtra("mName");
String mFormat = intent.getStringExtra("mFormat");
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
builder.setTicker("It's pill time!");
builder.setContentTitle(mName);
builder.setContentText(mFormat);
builder.setSmallIcon(R.drawable.ic_launcher);
Notification notification = builder.build();
NotificationManager nManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
nManager.notify(0, notification);
}
没有编译错误,我只是找不到问题。 在此先感谢您的帮助!
尝试替换
aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
和
aManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+calendar.getTimeInMillis(), pIntent);