如何将意图发送到正在运行的服务或后台活动?

问题描述

我现在正在 Android 中开发音乐播放器,并且目前无法使用通知。我在上一个、播放/暂停和下一个的通知中添加了三个操作。如果点击这些按钮,每个操作都需要一个 PendingIntent 来执行。

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

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

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

最好的方法是什么?

感谢任何帮助!

解决方法

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

如果您像在 guide on creating a Notification 中那样为您的 Intent 使用显式 BroadcastReceiver,那么您可以确保没有其他组件会收到广播(从那里复制的代码片段) :

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

所以看起来应该是这样:让您的 BroadcastReceiver 实例决定应该控制应用的哪个组件。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...