`
whotodo
  • 浏览: 167927 次
文章分类
社区版块
存档分类
最新评论

Android-AIDL和远程Service调用

 
阅读更多

本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命。所以我们干脆拿一个音乐播放器中进度条的实例来说明一下 AIDL和Remote Service的价值和使用方法,你把这个例子跑一边,体会一下就OK了。下面的例子是我正在准备的项目实例中的一部分。

首先说明一下我们面临的问题,如果看不懂下面的描述请看前面的课程:

第一、我们知道在AndroId中如果需要进行音乐播放,最方面的方法就是使用自带的MediaPlayer对象,如果我们在Activity中控制MediaPlayer对象进行播放,那么一旦你打开了另外一个程序譬如浏览器,那么歌声就会立刻停止,这当然不是我们需要的结果。 我们需要的是在做其他事情的同时能够在后台听歌,于是我们就需要把对MediaPlayer对象的操作放在后台Service中去。

第二、我们已经把对MediaPlayer的操作转移到Service中去了,按照我们以前的做法,我们在Activity中发送一个Intent 对象给Service对象,在Intent中传送播放啊、暂停啊一类的信息给Service,这样Service就知道该怎么做了。这一切看起来很美好,可是现在出了一个新问题,那就是我想在Activity中显示一个进度条,这个进度条要跟着Service中的MediaPlayer中的歌曲进度同步向前走,而且如果我点击进度条中的某一个位置,还想让歌曲跳转到新的时间点继续播放,这个,该怎么实现?

第三、我们需要在Activity中操作Service中的MediaPlayer对象,就好像这个对象是自己的一样。我们可以采用Android接口定义语言AIDL(Android Interface Definition Language)技术:

1、把Service中针对MediaPlayer的操作封装成一个接口(.aidl文件)
2、在Service中建个子类实现这接口的存根(stub)对象
3、并在onBind()方法中返回这个存根对象。
4、在Activity中使用绑定服务的方式连接Service,但是不用Intent来传递信息,而是在ServiceConnection的 onServiceConnected方法里,获得Service中Stub对象的客户端使用代理。我们通过操作Activity中的代理就可以达到操作 Service中的MediaPlayer对象的目的。这样我们就可以想用本地对象一样操作Service中的对象了,那么进度条一类的需求自然也就迎刃而解。

下面的例子,并不是专门为本讲准备的,所以有些无关代码,而且没加注释,请见谅(本例完整讲解会放在项目实训中,正在准备):

1、新建一个项目 App_elfPlayer ,启动Activity是个启动画面:CoverActivity

2、AndroidManifest.xml 的内容如下:

我们注意到有2个Activity,1个Service,还有读写外部存储的权限声明

3、CoverActivity.java的代码如下:这是个全屏的启动画面,2秒后会跳转到PlayerActivity

4、PlayerActivity.java的代码如下

5、其中用到的IServicePlayer.aidl,放在和Java文件相同的包中,内容如下:

一旦你写好了这个IServicePlayer.aidl文件,ADT会自动帮你在gen目录下生成IServicePlayer.java文件

6、MusicService.java的内容如下:

原文链接:http://android.yaohuiji.com/archives/728

转载编辑:Fgamers
转载地址:http://disanji.net/2011/04/09/android-aidl-service-call/

分享到:
评论

相关推荐

    Android AIDL和远程Service调用示例代码

    Android:AIDL和远程Service调用 本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命。所以我们干脆拿一个音乐播放器中进度条的实例来说明一下AIDL和Remote Service的价值和使用方法...

    Android(AIDL)调用远程服务

    Android调用远程服务(AIDL);两个APP,一个远程服务端APP,用于提供远程服务;一个客户端APP,用户绑定远程服务,并调用服务里面的方法

    AIDLService,远程调用例子。包括服务端与客户端两个工程文件

    AIDLService,远程调用例子。包括服务端与客户端两个工程文件源码,有兴趣的伙伴们抽时间可以看一下把。

    Android 远程Service调用实例

    实现了android的远程service调用哪个,使用了AIDL,并且提供了一个自定义类型的参数

    Android使用.aidl远程调用

    花了不少时间来研究,收个五分应该不过份吧,哈哈! 代码运行一定要先运行service应用,在运行cilent调用代码。

    androidAIDL使用的简单例子

    和博客文章http://blog.163.com/zhou_411424/blog/static/197362156201241541451/...对应改编的例子,实现了在一个APP1中通过AIDL远程调用另一个APP2的Service的函数,即使APP2没有被启动过! 均在eclipse编译运行通过。

    AIDL示例(Android Interface Definition Language)

    为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface ...

    AIDL最简单的使用步骤

    为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface ...

    Android Service的跨进程通信实战&Service/AIDL远程调用过程解析(Android Q)

    Service的跨进程通信实战 ...我们来看如何在Android中实现? PersonServer端实现 PersonServer端是服务的提供者,我们首先需要创建一个Service来提供该服务,并且需要该服务具备跨进程通信的能力,以便Client端进行

    android 3个APK见的AIDL 通信

    实现B为一个主程序,A远程调用B,并对外提供给C一个接口,实现对B函数的笤俑

    Android应用程序四大组件之使用AIDL如何实现跨进程调用Service

    一、问题描述 ...Android系统采用了远程过程调用(RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。对于Se

    android一步一步最基础学习__新手

    第二十二讲:AIDL和远程Service调用 第二十三讲:Drawable使用入门 第二十四讲:Android动画入门(一) 第二十五讲:Android动画入门(二) 第二十六讲:Android中的GPS应用入门 第二十七讲:Handler使用...

    AndroidAIDLLearnDemo:Android Studio中有关Android AIDL的简单实践

    AndroidAIDLLearnDemo Android Studio中有关Android AIDL的简单实践 在Android Studio中使用AIDL的步骤 在模块中添加了新的AIDL文件,... 通过在第3步中持有的引用来调用Stub的方法,这意味着您是从远程调用该方法的。

    android开发资料大全

    Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 AsyncTask进度条加载网站数据到ListView 命令行开发、编译、打包...

    Android Service

    Android中的sercice分为本地服务和远程服务: 本地服务运行场景:音乐播放器 远程服务运行场景:支付宝 1、本地服务:调用本地服务的代理提供的接口可以实现调用本地服务中的方法。 2、远程服务:调用远程服务的...

    MemoryFile实现进程间内存共享

    使用了aidl,实现远程service调用,以及service对client的callback

    实例讲解Android中的AIDL内部进程通信接口使用

    (至于这里为什么要先点销毁按钮才能播放,完全是为了给大家展示下,远程调用service时,怎么去解绑service)。 在这个例子中,我们用到了一个非常重要的概念,AIDL。 AIDL(android interface definition lan

Global site tag (gtag.js) - Google Analytics