Android Studio - 无法通过广播接收器设置通知

时间:2018-03-21 19:51:15

标签: android android-intent notifications broadcastreceiver notificationmanager

所以我的程序应该在应用程序停止几小时后启动通知(刚刚用于测试的分钟数)。它这样做,但问题是如果在推送通知之前第二次执行代码,则根本不会发送任何通知。

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。

2 个答案:

答案 0 :(得分:0)

您可以使用NotificationCompat.Builder#setWhen(long)安排通知,无需警报管理员。

答案 1 :(得分:0)

    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());