通知消息立即被解雇 - Android

时间:2015-05-23 07:29:05

标签: android time notifications broadcastreceiver alarmmanager

我正在创建一个将药品数据存储在SQLite数据库中的应用程序,以便在需要时向用户发送通知。 我已经创建了BroadcastReceiver类并管理了通知Intent。 当我在数据库中添加时间(hh:mm:ss)时调用Calendar.set()函数,但问题是每次我在TimePicker对话框中设置时间时,都会立即发送通知,无论何时何地。

以下是我存储时间和其他内容的活动中的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类(扩展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);
}

没有编译错误,我无法发现问题。 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试替换

 aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);

 aManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+calendar.getTimeInMillis(), pIntent);
相关问题