设置不同活动中的多个警报

时间:2013-11-28 11:26:24

标签: android android-alarms

我是新手程序员,我正在创建一个包含多个活动的闹钟应用程序,每个活动都能设置1个闹钟。 我正在为所有活动使用相同的报警广播,我在广播接收器内使用通知管理器。 我使用getextras为使用broadcastreceiver for notify命令的不同活动传递不同的id。  当我试用该应用程序时,显示的警报似乎是我按下最新按钮的活动。此外,设置时间和通知时间之间还有±1分钟的误差。任何人都可以建议我可以进行任何其他更改,这样我就可以在确切的设定时间获得多个通知,而不仅仅是一个。在此先感谢您的回答。 :)

这是闹钟接收器代码:

public void onReceive(Context context, Intent intent) {

        Toast.makeText
            (context, R.string.app_name, Toast.LENGTH_SHORT).show();
        String Title=intent.getStringExtra("title");
        String days=intent.getStringExtra("days");
        int id=intent.getIntExtra("id", 0);
         NotificationManager nm=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
            Notification notify = new Notification(R.drawable.ic_launcher,days,System.currentTimeMillis());
           // Intent i= new Intent(context,MainActivity.class);
            PendingIntent p= PendingIntent.getActivity(context,0,intent,0);
            notify.setLatestEventInfo(context, Title, days, p);
            nm.notify(id,notify);

以下是main.java中的onclicklistener代码:

           AlarmManager am = null;

            PendingIntent appIntent = null;
            String days = et.getText().toString();
            int daynum = java.lang.Integer.parseInt(days);
            String s2 = (String) ss.getSelectedItem();
            Calendar c = Calendar.getInstance();
            Calendar c1=Calendar.getInstance();
            int y = 2013, m = Calendar.NOVEMBER, d = 29, h = 11, i = 6;
            if (s2.equals("Morning")) {
                h = 7;
            } else if (s2.equals("Afternoon")) {
                h = 12;
            } else if (s2.equals("Evening")) {
                h = 17;
            } else if (s2.equals("Night")) {
                h = 21;
            }
            h=12;i=6;
            c.set(y, m, d, h, i,0);
        c1.setTimeInMillis(c.getTimeInMillis()-daynum*24*60*60*1000);
            button.setText(c1.toString());
            Context context =main.this;
            Intent intent = new Intent(context, AlarmReceiver2.class);
            intent.putExtra("title", "title");
            intent.putExtra("days",days+" days left");
            intent.putExtra("id",1);
            appIntent = PendingIntent.getBroadcast(context, 0,
                    intent, 0);
            am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), appIntent);

1 个答案:

答案 0 :(得分:1)

要拥有多个警报,您必须创建多个PendingIntent。从您的代码中可以看出,您已经传递了相同的REQUEST_CODE值,即0

PendingIntent p= PendingIntent.getActivity(context,0,intent,0);

因此,为了获得多个警报,您必须每次将PendingIntents区分为不同的值。我总是使用当前时间值,因为它每次都不同。 像我下面使用的那样替换您的代码,然后重试。

PendingIntent p= PendingIntent.getActivity(context,System.currentTimeInMillis(),intent,0);

谢谢。