我是新手程序员,我正在创建一个包含多个活动的闹钟应用程序,每个活动都能设置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);
答案 0 :(得分:1)
要拥有多个警报,您必须创建多个PendingIntent。从您的代码中可以看出,您已经传递了相同的REQUEST_CODE值,即0
PendingIntent p= PendingIntent.getActivity(context,0,intent,0);
因此,为了获得多个警报,您必须每次将PendingIntents区分为不同的值。我总是使用当前时间值,因为它每次都不同。 像我下面使用的那样替换您的代码,然后重试。
PendingIntent p= PendingIntent.getActivity(context,System.currentTimeInMillis(),intent,0);
谢谢。