首页 > 解决方案 > 如何将意图发送到正在运行的服务或后台活动?

问题描述

我现在正在 Android 中开发一个音乐播放器,目前我被通知卡住了。我为上一个、播放/暂停和下一个的通知添加了三个操作。如果单击这些按钮,则每个操作都需要执行 PendingIntent。

我的应用程序目前正在构建有一个 MainActivity 和一个服务,用于播放加载的音频文件。Main 活动通过对服务的引用进行通信,以执行下一首歌曲等操作。

我想通过通知上的操作来实现一个意图是发送到服务本身,但不启动它或发送到 MainActivity,但如果它当前在后台,则不将其带回前台。这样服务可以自己控制该操作,或者让 MainActivity 调用适当的方法。

经过一些研究,我发现有些人使用广播接收器这样做,但据我所知,广播被发送到任何合适的应用程序,我绝对不想要。我也找不到一些指向解决方案的文档或类似文件。

做这个的最好方式是什么?

任何帮助表示赞赏!

标签: androidandroid-serviceandroid-music-player

解决方案


...但据我了解,广播被发送到任何合适的应用程序

Intent如果您BroadcastReceiver像他们在创建通知指南中所做的那样使用显式,那么您可以确定没有其他组件将接收广播(从那里复制的代码片段):

Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
snoozeIntent.setAction(ACTION_SNOOZE);
snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

所以看起来这是要走的路:让你的BroadcastReceiver实例决定你的应用程序的哪个组件应该控制。


推荐阅读