报警应用中的广播接收器
Broadcast receiver in alarm application
在报警应用中,用户可以设置无限数量的报警吗?
我正在研究项目中的警报选项,我意识到它只能工作一次。如果我希望能够发出许多警报,应该如何使用 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());
}
}
这就是为什么有 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 误解。
在报警应用中,用户可以设置无限数量的报警吗? 我正在研究项目中的警报选项,我意识到它只能工作一次。如果我希望能够发出许多警报,应该如何使用 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());
}
}
这就是为什么有 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 误解。