从广播接收器在 AlarmManager 事件上启动 Activity

Posted

技术标签:

【中文标题】从广播接收器在 AlarmManager 事件上启动 Activity【英文标题】:Launch Activity on AlarmManager event from broadcast receiver 【发布时间】:2021-11-29 04:56:17 【问题描述】:

我有一个警报管理器,通过它我通过提供广播接收器设置触发它的时间,onReceive 广播接收器方法成功调用,但是如果应用程序没有运行,任何想法如何从onReceive 启动应用程序前景?

菜单

<receiver
    android:exported="true"
    android:name=".AlarmReceiver" />

广播接收器

  @Override
    public void onReceive(Context context, Intent intent)
    
        Intent scheduledIntent = new Intent(context, MainActivity.class);
        scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(scheduledIntent);
    

MainActivity

        AlarmManager alarmManager=(AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent=new Intent(this,AlarmReceiver.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(this,1000,intent,0);
        alarmManager.set(AlarmManager.RTC_WAKEUP,timeInMillis,pendingIntent);

请帮助 谢谢

【问题讨论】:

您无法在现代版本的 Android 上从后台启动活动。请改用高优先级的Notification 感谢@CommonsWare 的及时回复,如果我想自动播放预定的音乐流,您建议使用什么?其次,正如您建议使用高优先级通知,它是本地通知还是推送通知,我可以从推送通知启动活动吗?谢谢 "如果我想自动播放预定的音乐流,您建议使用什么?" -- 如果它类似于铃声,您或许可以将其直接绑定到Notification。如果它更长一些,让Notification 为播放流的前景Service 提供UI。 “是本地通知还是推送通知”——Android 上的Notification 指的是我认为您所说的“本地通知”。 “我可以从推送通知中启动活动吗?” -- 没有。 它基本上是一个使用 exoplayer 的广播音乐流,我们需要的是用户设置一个他想要播放的时间,当那个时间到来时流自动开始播放。我脑海中的两件事是后台服务或前台服务。 【参考方案1】:

它基本上是一个使用 exoplayer 的广播音乐流,我们需要的是用户设置一个他想要播放的时间,当那个时间到来时流自动开始播放。

后台服务在 Android 8.0+ 上只会运行一分钟。对于音乐播放器,您需要一个前台服务,其中关联的Notification 为用户提供播放控制(例如,暂停、恢复、停止)。

【讨论】:

谢谢,我需要更多帮助,我的要求是在广播接收方法上显示通知,并且该通知可以流式传输音乐流。音乐流方法是写在 main Activity 中的,但是当时调用广播接收器的 onReceive 时,没有 main Activity 的方法是可调用的,因为它不在前台。需要帮助,谢谢 @AliAkram:“音乐流方法写在主活动中”——这不起作用。您需要将音乐流逻辑移动到可以从活动(当它在附近)、前台服务(当它在附近)或来自Notification 的广播(当它是周围)。【参考方案2】:

首先,您应该使用workManager 另外,Brodcastreciver 对不同的安卓版本有限制doc

【讨论】:

以上是关于从广播接收器在 AlarmManager 事件上启动 Activity的主要内容,如果未能解决你的问题,请参考以下文章

alarmManager关机再开机后还有效吗

终止应用程序后未触发 AlarmManager 通知

Android白名单&后台唤醒收集

AlarmManager和BroadcastReceiver的LocalNotification未在Android O(oreo)中启动

如何使用警报管理器将数据从片段传递到广播接收器

如何检测服务和广播接收器中的关键事件