android - 如何将意图发送到正在运行的服务或后台活动?
问题描述
我现在正在 Android 中开发一个音乐播放器,目前我被通知卡住了。我为上一个、播放/暂停和下一个的通知添加了三个操作。如果单击这些按钮,则每个操作都需要执行 PendingIntent。
我的应用程序目前正在构建有一个 MainActivity 和一个服务,用于播放加载的音频文件。Main 活动通过对服务的引用进行通信,以执行下一首歌曲等操作。
我想通过通知上的操作来实现一个意图是发送到服务本身,但不启动它或发送到 MainActivity,但如果它当前在后台,则不将其带回前台。这样服务可以自己控制该操作,或者让 MainActivity 调用适当的方法。
经过一些研究,我发现有些人使用广播接收器这样做,但据我所知,广播被发送到任何合适的应用程序,我绝对不想要。我也找不到一些指向解决方案的文档或类似文件。
做这个的最好方式是什么?
任何帮助表示赞赏!
解决方案
...但据我了解,广播被发送到任何合适的应用程序
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
实例决定你的应用程序的哪个组件应该控制。
推荐阅读
- java - 有什么方法可以根据我们的输入链接到该网站?
- laravel - 创建用户时,给role_id分配UUID
- bash - Docker 文件没有 /bin/bash 目录
- python-3.x - 同时调度或运行线程
- xlwings - xlwings UDF:返回多个输出
- angular - 如何阻止来自 AWS Beanstalk 应用程序(Angular)的 Web 抓取或爬取 Web 内容(图像)?
- javascript - chrome extasnsion 获取本地 blob
- java - 如何在没有springboot的情况下使用.jar打包在vanilla java项目中加载`application.properties`
- tinymce - tinymce在包含时被删除
- python - 如何根据多列对数据进行分组并构造新列 - Pyspark