首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >android mediaplayer应用程序中服务和活动之间的通信

android mediaplayer应用程序中服务和活动之间的通信
EN

Stack Overflow用户
提问于 2012-07-25 02:34:27
回答 1查看 2K关注 0票数 4

我正在开发一个媒体播放器应用程序,它将使用服务在后台播放音乐,但我对与服务进行通信的所有不同方式感到困惑。我想让服务在活动播放时通知它,这样按钮就可以更改为暂停。我还想要一个搜索栏,所以我需要关于当前正在播放的服务的信息。

我已经看了不同的例子有一段时间了,似乎每个人都在用不同的方式来做。一些人将活动绑定到服务上,一些人只是使用全球广播,而android音乐播放器使用的是aidl。

就媒体播放器而言,我应该使用哪种方法?会不会允许我做在其他方法上不起作用的事情?使用aidl允许他们做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-25 04:31:37

在过去的几个月里,我遇到了大致相同的问题。这不是一个真正容易回答的问题,因为有几个变量会影响决策。很可能,您最终会使用这些选项的组合。

问:沟通是单向的吗?仅仅从服务到活动?

答:如果是这样,那么LocalBroadcastManager就是你的朋友。我发现这是非常有用的,也是从服务到活动的最简单的通信方式之一。

问:您希望其他应用程序接收您的广播吗?

答:如果是这样的话,你将不能使用LocalBroadcastManager。您将不得不使用带有Context.sendBroadcast()的全局变量。

问:您是否希望从您的活动中与服务进行通信?

答:这个问题很棘手。如果你只需要告诉服务一些东西,并且不期望任何回报,那么你可以只使用intents。但是,如果您需要从服务中返回信息,那么您肯定会想要查看binding to that service

我发现,当绑定到您的服务时,有时我发现自己在玩等待游戏,而activity绑定到服务。因此,当时间很重要时,这可能会有一点困难。在期望与服务通信之前,您必须确保已将其绑定到服务。

给定您的示例,并假设您不期望其他应用程序接收您的广播,您可以在您的媒体播放器服务中执行类似以下操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Intent broadcastIntent = new Intent(PlayerService.AUDIO_PLAYING);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);

然后,在您的玩家活动中,您需要注册为侦听器以实现此目的。可能在您的onCreate()或onStart()中。根据应用程序的不同,这可能会有所不同。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IntentFilter broadcastsToListenFor = new IntentFilter();
broadcastsToListenFor.addAction(PlayerService.AUDIO_PLAYING);
LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, broadcastsToListenFor);

你的broadcastReceiver应该看起来像这样...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Set up broadcast receiver
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

    @Override
    public synchronized void onReceive(Context context, Intent intent) {

        if(action.equals(PlayerService.AUDIO_PLAYING)) {

          // Set your play button image to pause here
        }
    }
};

最后,确保在onStop()或onPause()方法中取消您的活动接收这些广播的注册。同样,根据您的特定场景...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);

我们最近做了一些非常类似的事情,而且效果很好。我真的认为测试和尝试每一个选项都是值得的,因为你可能会发现每一个选项都是正确的选择。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11641913

复制
相关文章
MediaPlayer(一)--Android MediaPlayer的使用方法
为了模拟实现Android MediaPlayer的实现,需要先了解下MediaPlayer的简单使用方法, 这里只列举其中一种使用方式, 以这个为模板利用ffmpeg实现对应的同名接口和调用方法.
小蚂蚁与大象
2020/04/17
9720
MediaPlayer(一)--Android MediaPlayer的使用方法
Android-MediaPlayer
突然觉得这个音乐播放有点意思,我们来做一下吧。 首先我们来一个名为MediaPlayerDemo的项目。 然后再main.xml文件里面创建三个按钮,分别是播放、暂停、停止,代码如下:
晨曦_LLW
2020/09/25
7060
微服务之间的通信的方式
RestTemplate是一个Http客户端,类似于HTTPClient,org但比HTTPClient更简单。我们通过RestTemplate来简单演示一下服务之间的调用,我们使用两个服务来做演示。一个商品服务,一个订单服务。首先创建一个商品服务工程:
端碗吹水
2020/09/24
8310
Android - 使用Intent在活动之间穿梭
Intent有多个构造函数的重载,其中一个 Intent(Context packageContext,Class<?>cls)
博博1998
2022/04/25
5290
Unity中处理脚本之间的通信方式和技术
将一个脚本实例作为变量传递给另一个脚本,通过引用来进行通信。通常用于两个或多个脚本需要频繁交互的情况。
一凡sir
2023/08/06
8060
在微服务之间进行通信
原文地址:https://dzone.com/articles/communicating-between-microservices
Steve Wang
2018/06/20
2.8K0
在微服务之间进行通信
Android MediaPlayer Error/Info Code
1: 事实上代表MEDIA_ERROR_UNKNOWN -2147483648: (0x80000000)没有做什么说明,实际上它也是代表unknown error
全栈程序员站长
2022/07/10
6530
如何解决服务之间的通信问题?
[1]HTTP REST方式 使用http协议进行数据传递 json格式数据 [2]RPC方式 远程过程调用 二进制数据 从OSI七层结构来讲,即物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。http属于应用层协议,而RPC属于传输层,所以RPC方式的传输效率比http高。SpringCloud使用的是HTTP协议传递数据。
别团等shy哥发育
2023/02/25
7620
如何解决服务之间的通信问题?
React native和原生之间的通信
RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原生模块之 间通信,主要有三种方法: 1)使用回调函数Callback,它提供了一个函数来把返回值传回给JavaScript。 2)使用Promise来实现。 3)原生模块向JavaScript发送事件。 关于使用回调,这是最简单的一种通信,这里可以看看官网的实现,今天要讲的是滴三种由原生模块向JavaScript发送事件。 (1)首先,你需要定义一个发送事件的方法。如下所示: /*原生模块可以在没有被调用的情况下往JavaScript发送事
xiangzhihong
2018/02/05
4.7K1
React native和原生之间的通信
Android Service 服务(三)—— bindService与remoteService
bindService是绑定Service服务,执行service服务中的逻辑流程。
阳光岛主
2019/02/19
2.3K0
Android Service 服务(三)—— bindService与remoteService
Java(Android)与C++之间的Socket通信
Java与C++之间的Socket通信,对于小的数据量和控制命令,直接可以封装成json或xml格式,进行传输。但对于文件等大数据量传输,必须要将文件封装成帧,每一帧都设定固定大小的缓冲区,逐帧传输。此时json和xml便不再适用了。
Twcat_tree
2022/11/30
8360
MediaPlayer(四)--MediaPlayer()流程
先从源头开始看 frameworks/base/media/java/android/media/MediaPlayer.java
小蚂蚁与大象
2020/04/17
9730
SpringCloud入门系列之微服务之间的通信
Ribbon作为消费者微服务一端,也会向注册中心进行注册,注册中心Eureka service会向消费者Ribbon提供当前注册的所有节点数据(url、端口)信息。然后根据轮循(默认)策略请求服务提供者。
AI码真香
2022/09/13
7880
微服务之间的通信你真的了解吗?
技术正在以令人难以置信的速度发展,所以看到新的技术和趋势一直在市场上形成并不奇怪。由于微服务的进步,更强大的云计算实施以及无服务器架构占据了中心位置,2018年对于开发人员来说是非常棒的一年。
Java架构师历程
2019/03/20
2.1K0
互斥锁和进程之间的通信
进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理。
全栈程序员站长
2022/07/21
5580
点击加载更多

相似问题

远程服务和活动android之间的通信

12

Android活动与服务之间的通信

13

Android服务与活动之间的通信

45

android在远程服务和活动之间进行通信

10

在Android中位置服务和活动之间的通信?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文