我使用通知开发了一个警报项目.我使用通知ID作为唯一,并且每分钟设置一个警报,即下午2:45,下午2:46,下午2:47,但警报仅在最后一个,下午2:47触发.
为什么?
int dayofweek;
int notify;
int notifyid=0;
Cursor notifyvalue=db.getnotifyid();
if (notifyvalue.moveToPosition(0))
notifyid =notifyvalue.getInt(notifyvalue.getColumnIndex("notifyvalue"));
if(notifyid==0)
{
db.InsertNotifyId(2600);
}
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY,22);
calSet.set(Calendar.MINUTE, 10);
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
int notify1 = 0;
if(repeateddayname.equalsIgnoreCase("Everyday"))
{
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, true,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else
{
String splitrepeateddayname[]=repeateddayname.split(",");
for(int i=0; i < splitrepeateddayname.length; i++)
{
if(splitrepeateddayname[i].equalsIgnoreCase("Sunday"))
{
dayofweek=1+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Monday"))
{
dayofweek=2+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Tuesday"))
{
dayofweek=3+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Wednesday"))
{
dayofweek=4+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Thursday"))
{
dayofweek=5+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Friday"))
{
dayofweek=6+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
else if(splitrepeateddayname[i].equalsIgnoreCase("Saturday"))
{
dayofweek=7+(7-calSet.DAY_OF_WEEK);
Cursor notifyvalue1=db.getnotifyid();
if (notifyvalue1.moveToPosition(0))
notify1=notifyvalue1.getInt(notifyvalue1.getColumnIndex("notifyvalue"));
setAlarm(calSet, false,notify1+1,SplitAlramVoice[1]);
db.InsertNotifyId(notify1+1);
}
}
}
设置报警功能:
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
intent.putExtra("NotifID", notifyid);
intent.putExtra("Audio", AlarmAudio);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
if(repeat)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
else
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),dayofweek*24*60*60*1000,pendingIntent);
AlarmReceiver类:
int notifID = intent.getExtras().getInt("NotifID");
String foraudio= intent.getExtras().getString("Audio");
NotificationManager nm;
nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence from = "My Dua";
CharSequence message = "Cheking By Ismail";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,new Intent(), 0);
Notification notif = new Notification(R.drawable.ic_launcher,"Mohamed Ismail", System.currentTimeMillis());
notif.setLatestEventInfo(context, from, message, contentIntent);
Uri audio=Uri.parse("mnt/sdcard/sounds/"+foraudio+".mp3");
notif.sound=audio;
nm.notify(notifID++, notif);
解决方法:
创建一个唯一的通知ID,并传递如下:
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
intent.putExtra("NotifID", notifyid);
intent.putExtra("Audio", AlarmAudio);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), notifyid, intent, PendingIntent.FLAG_one_shot);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
标签:java,android,repeat,alarm 来源: https://codeday.me/bug/20190709/1412358.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。