通知を使って警報プロジェクトを開発しました。通知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);