我正在创建一个将药品数据存储在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);
}
没有编译错误,我无法发现问题。 在此先感谢您的帮助!
答案 0 :(得分:0)
尝试替换
aManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
与
aManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+calendar.getTimeInMillis(), pIntent);