【问题标题】:How do I play multiple alarms using notification?如何使用通知播放多个警报?
【发布时间】:2012-12-03 09:55:22
【问题描述】:

我使用通知开发了一个警报项目。我将通知 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);  

【问题讨论】:

    标签: java android alarm repeat


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 2016-09-27
      • 2019-01-02
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多