Android Studio - 无法使用广播接收器设置通知
Posted
技术标签:
【中文标题】Android Studio - 无法使用广播接收器设置通知【英文标题】:Android Studio - Trouble setting off notifications with broadcast receiver 【发布时间】:2018-08-31 02:34:52 【问题描述】:所以我的程序应该在应用程序停止几个小时后发出通知(刚才正在使用几分钟进行测试)。它会这样做,但它的问题是,如果在推送通知之前第二次执行代码,则根本不会推送任何通知。
Override
public void onStop()
super.onStop();
Calendar calendar = Calendar.getInstance();
int alarmTime = (calendar.get(Calendar.MINUTE)) + 3;
calendar.set(Calendar.MINUTE,alarmTime);
Intent intent3 = new Intent(getApplicationContext(),timeReceiver.class);
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(getApplicationContext(),100,intent3,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent3);
@Override
protected void onRestart()
super.onRestart();
//this.onCreate(null);
这就是我的广播接收器类的样子...
public class timeReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
NotificationManager notificationManager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent repeating_intent = new Intent(context, RepeatingActivity.class);
repeating_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context,100,repeating_intent,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentIntent(pendingIntent);
builder.setSmallIcon(android.R.drawable.arrow_up_float);
builder.setContentTitle("Timer Notification");
builder.setContentText("blaaah blaaah blah");
builder.setAutoCancel(true);
notificationManager.notify(100,builder.build());
我的预期是警报会在最后一次执行 onStop() 方法后 3 分钟重置并触发,但这不会发生。我真的不明白为什么不这样做,如果有人能给我见解/可能的解决方案,我将不胜感激。 SDK版本也是24。
【问题讨论】:
【参考方案1】:您可以使用NotificationCompat.Builder#setWhen(long)
安排通知,无需警报管理器。
【讨论】:
我尝试使用 NotificationCompat 构建器安排通知,但通知只是立即触发。我的代码有问题吗?我将在下面的答案部分中发布它。这是在 onStop() 方法中。 你用过setWhen(timestamp)
吗?
例如,您必须使用Calendar.getInstance().getTimeInMillis() + (60000)
使其在 1 分钟内触发。
是的,我试过插入 'builder.setWhen(Calendar.getInstance().getTimeInMillis() + (60000));'并且一旦停止代码运行,通知仍然会触发。【参考方案2】:
int notification1Id = 56748;
Calendar calendar = Calendar.getInstance();
int alarmTime = (calendar.get(Calendar.MINUTE)) + 2;
calendar.set(Calendar.MINUTE,alarmTime);
long timeMs = calendar.getTimeInMillis();
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
final PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
// Build notifications
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelID);
builder.setContentIntent(pendingIntent);
builder.setSmallIcon(android.R.drawable.arrow_up_float);
builder.setContentTitle("It's been a while...");
builder.setContentText("Remember to keep track of your calories using the calorie counter");
builder.setAutoCancel(true);
builder.setWhen(timeMs);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notification1Id, builder.build());
【讨论】:
以上是关于Android Studio - 无法使用广播接收器设置通知的主要内容,如果未能解决你的问题,请参考以下文章
Android - 在动态注册的广播接收器上出现“无法传递广播”错误