【问题标题】:Broadcast receiver in alarm application报警应用中的广播接收器
【发布时间】:2018-04-17 06:20:42
【问题描述】:

在警报应用中,用户可以设置无限数量的警报吗? 我正在研究我的项目中的警报选项,我意识到它只工作一次。如果我希望能够发出许多警报,应该如何使用 Threads 或 IntentFilter 或其他方式?

public class AlarmReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    String title = intent.getStringExtra("Title");
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    Intent myIntent = new Intent();
    System.out.println("Title: " + title);
    switch (title){
        case "Weight":
            myIntent = new Intent(context, WeightActivity.class);
            break;
        case "Measure":
            myIntent = new Intent(context, measurActivity.class);
            break;
        case "Pr":
            myIntent = new Intent(context, PrsActivity.class);
            break;
        case "Macros":
            myIntent = new Intent(context, DietActivity.class);
            break;
    }

    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 100, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(context)
            .setContentIntent(pendingIntent)
            .setSmallIcon(R.drawable.dumbbell)
            .setContentTitle("Tracker")
            .setContentText(title)
            .setAutoCancel(true);

    notificationManager.notify(1, builder.build());
}

}

【问题讨论】:

  • 开关不适用于字符串(标题),它使用整数。
  • 开关没问题
  • 感谢第一个答案,它的帮助。

标签: android broadcast alarm receiver


【解决方案1】:

这就是为什么会有 requestCodes

注意requestCode, 您只需在设置警报时为您的 PendingIntent 使用不同的请求代码。

public setMyAlarm(int requestCode){

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0);

alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() +
        60 * 1000, alarmIntent);
}

由于 requestCode 的类型是 int,所以设置大量警报应该绰绰有余。

此外,为了取消警报,您必须使用与设置警报相同的 requestCode 提及 Pending Intent。

请不要误会你的 Notification 的 PendingIntent。

【讨论】:

  • 谢谢。如果我想让闹钟在任何一天重复,也许你也可以帮助它应该如何穿?
  • 要设置重复闹钟,您可以使用alarmMgr.setRepeating(),要设置在特定日期,您可以使用日历并使用Calendar.DAY_OF_WEEK 设置日期,并以毫秒为单位传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多