立即触发通知消息 - 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);