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 studio之广播监听接收短信

Android - 在动态注册的广播接收器上出现“无法传递广播”错误

Android本地广播的使用

“重新启动接收器”无法正常工作 android [Xamarin.Android]

android studio 模拟器关机重启操作

android无法开启广播接收器