我试图制作一个应用程序,每次用户必须服药时都会触发通知。
问题:我想在特定时间发送通知。我在互联网上搜索,但我只找到了解释如何在指定的时间间隔后发送通知的教程。我有更多次存储在SQLite数据库中,我想为每个数据库发出通知,比如闹钟。
这是我的setAlarm()
功能(如果不清楚,请询问):
public void setAlarm()
{
String mName = NameFld.getText().toString();
String mFormat = FormatSpn.getSelectedItem().toString();
Date date = new Date();
Calendar calendar = Calendar.getInstance();
Calendar current = Calendar.getInstance();
current.setTime(date);
calendar.setTime(date);
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);
if(current.before(calendar))
{
calendar.add(Calendar.DATE, 1);
}
Intent intent = new Intent(this, AlarmReceiver.class);
medName = mName;
medFormat = mFormat;
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);
}
此功能以小时和分钟值分割日期,并将它们设置为Calendar
。一旦运行,我会收到没有标题和文字的通知(我在static
函数中管理它们,将药物数据发送到BroadcastReceiver
类),当我添加新的警报时,它不会触发。就像我之前说过的那样,我想为每个时间值收到的通知。
这是BroadcastReceiver
类:
public class AlarmReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String[] data = AddMedicine.getData();
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
builder.setTicker("It's pill time!");
builder.setContentTitle(data[0]);
builder.setContentText(data[1]);
builder.setSmallIcon(R.drawable.ic_launcher);
Notification notification = builder.build();
NotificationManager nManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
nManager.notify(AddMedicine.NOTIFICATION_ID, notification);
AddMedicine.NOTIFICATION_ID++;
}
}
如果有人能解决我的问题,我将非常感激。提前谢谢!
编辑:这是getData()
方法,它提供药物的名称和格式,以便将它们放入通知的构建中:
public static String[] getData()
{
String[] data = {medName, medFormat};
return data;
}
medName
和medFormat
是在setAlarm()
方法中初始化的全局变量。
答案 0 :(得分:0)
您可以使用 SharedPref 来存储一个计数器,该计数器将为每个PendingIntent递增。 示例: -
Ext.define('App.model.rssSoaFeed_m', {
extend: 'Ext.data.Model',
idProperty:'extIdProperty',//renaming the extjs id property
fields: [
{ name: 'title', type: 'auto' },
{ name: 'id', type: 'auto' }, //my custom id property
],
proxy:
{
type: 'ajax',
url: '/someurl.service',
extraParams: {
},
reader: {
type: 'json',
root: 'query.results.item'
}
}
});
答案 1 :(得分:0)
当我添加新闹钟时,它不会触发
您必须为每个requestCode
使用唯一标识符(getBroadcast
方法的PendingIntent
字段),因为您对所有实例使用相同的标识符(0)使用PendingIntent.FLAG_UPDATE_CURRENT
,因此只会触发最后创建的一个。
我收到没有标题和文字的通知
我认为您必须使用Intent
个附加内容将数据发送到AlarmReceiver
,因为在您的情况下数据会在AlarmReceiver
被触发之前发生变化,因此您会得到错误的值。