4

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

1 に答える 1

1

通知用の一意の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);
于 2012-12-04T07:13:17.630 に答える