如何在Android中设置多个闹钟?
到目前为止,感谢这个网站,即使我打开手机,我也可以设置一个闹钟,并设置并激活。
现在,我设置了一个闹钟来显示事件A的提醒,我需要应用程序设置另一个闹钟来显示事件B的另一个提醒。
我一定是做错了,因为它只会触发事件A的提醒。似乎一旦build立起来,任何其他的警报都被理解为是一样的。 🙁
以下是我在两个步骤中所做的细节:
1)从一个活动中,我设置了一个闹钟,在某个时间和date将打电话给一个接收器
Intent intent = new Intent(Activity_Reminder.this, AlarmReceiver_SetOnService.class); intent.putExtra("item_name", prescription .getItemName()); intent .putExtra( "message", Activity_Reminder.this .getString(R.string.notif_text)); intent.putExtra("item_id", itemId); intent.putExtra("activityToTrigg", "com.companyName.appName.main.Activity_Reminder"); PendingIntent mAlarmSender; mAlarmSender = PendingIntent.getBroadcast( Activity_Reminder.this, 0, intent, 0); long alarmTime = dateMgmt.getTimeForAlarm(pickedDate); Calendar c = Calendar.getInstance(); c.setTimeInMillis(alarmTime); // Schedule the alarm! AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000, mAlarmSender);
2)从接收器,我打电话给一个服务
Bundle bundle = intent.getExtras(); String itemName = bundle.getString("item_name"); String reminderOrAlarmMessage = bundle.getString("message"); String activityToTrigg = bundle.getString("activityToTrigg"); int itemId = Integer.parseInt(bundle.getString("item_id")); NotificationManager nm = (NotificationManager) context.getSystemService("notification"); CharSequence text = itemName + " "+reminderOrAlarmMessage; Notification notification = new Notification(R.drawable.icon, text, System.currentTimeMillis()); Intent newIntent = new Intent(); newIntent.setAction(activityToTrigg); newIntent.putExtra("item_id", itemId); CharSequence text1= itemName + " "+reminderOrAlarmMessage; CharSequence text2= context.getString(R.string.notif_Go_To_Details); PendingIntent pIntent = PendingIntent.getActivity(context,0, newIntent, 0); notification.setLatestEventInfo(context, text1, text2, pIntent); notification.flags = Notification.FLAG_AUTO_CANCEL; notification.defaults = Notification.DEFAULT_ALL; nm.notify(itemId, notification);
提前致谢,
monn3t
好的,当你设置一个PendingIntent的时候,你应该给它分配一个唯一的ID,以便稍后要识别它(修改/取消它)
static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags) //Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent). static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags) //Retrieve a PendingIntent that will perform a broadcast, like calling Context.sendBroadcast().
请求代码是该ID。
在你的代码中,你不断地重置SAME PendingIntent,而不是每次使用不同的RequestCode。
PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0);
它必须是一个整数,我想你有一个primaryid( itemId ),可以识别报警A从报警B.
您可以通过在pendingIntent.getBroadcast(……)中提供不同的请求代码来设置多个警报。
我用来设置多个警报的方法是我创build了一个警报。 我在报警设置类中初始化一个静态整数,每当我点击主要活动中的“添加报警”button时,每次从我的主要活动中增加一个整数。 例如
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void addAlarmClick(View v) { AlarmActivity.broadcastCode++; startActivity(new Intent(this, AlarmActivity.class)); } }
AlarmActivity.java
public class AlarmActivity extends AppCompatActivity {` //........ public static int broadcastCode=0; //........ Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class); pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, broadcastCode, myIntent, 0);