Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将意图发送到正在运行的服务或后台活动?_Android_Android Service_Android Music Player - Fatal编程技术网

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

Android 如何将意图发送到正在运行的服务或后台活动?,android,android-service,android-music-player,Android,Android Service,Android Music Player,我现在正在用Android开发一个音乐播放器,目前我一直在等待通知。我在通知中添加了“上一步”、“播放/暂停”和“下一步”三个操作。如果单击这些按钮,则每个操作都需要执行一个PendingEvent 我的应用程序目前正在构建,有一个MainActivity和一个服务,用于播放加载的音频文件。主活动通过对服务的引用进行通信,以执行诸如下一首歌之类的操作 我想通过通知上的操作实现的是,将意图发送到服务本身,但不启动它,或者发送到MainActivity,但如果它当前在后台,则不将其带回前台。这样,要

我现在正在用Android开发一个音乐播放器,目前我一直在等待通知。我在通知中添加了“上一步”、“播放/暂停”和“下一步”三个操作。如果单击这些按钮,则每个操作都需要执行一个PendingEvent

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

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

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

最好的方法是什么

感谢您的帮助

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

如果您像在中一样为您的
BroadcastReceiver
使用显式
Intent
,则可以确保没有其他组件将接收广播(从那里复制的代码片段):


因此,看起来这是一条路:让你的
BroadcastReceiver
实例决定你的应用程序的哪个组件应该控制。

当这个问题被激活时,我实际上发现了另一条信息,它正好满足了我的需要。您可以使用PendingEvent中的
getService
创建startService意图。如果服务已经在运行,startService不会创建新实例,只需调用
onStartCommand
。现在我有了一个执行意图的例程。@vMysterion-正确,我认为总是从通知开始服务是一个好主意-使用名为“播放”、“上一步”等按钮。无论如何,服务迟早会涉及(因为我猜活动不会负责管理MediaPlayer)。对于来自服务和活动的消息(如果在前台),可以使用本地广播,例如更新任何播放按钮或“当前歌曲信息”。
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);