Android AIDL和远程Service 调用

  次阅读 作者:智能小宝 来源:互联网 2016-01-13 22:13 我要评论(0)

本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命。所以我们干脆拿一个音乐播放器中进度条的实例来说明一下 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 的内容如下:

01

<?xml version="1.0" encoding="utf-8"?>

02

<manifest package="app.android.elfplayer"xmlns:android="http://schemas.android.com/apk/res/android"android:versioncode="1" android:versionname="1.0">

03

<uses -sdk="" android:minsdkversion="7">

04

<uses -permission=""android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses>

05

06

<application android:label="@string/app_name" android:icon="@drawable/icon">

07

<activity android:name=".CoverActivity">

08

<intent -filter="">

09

<action android:name="android.intent.action.MAIN">

10

<category android:name="android.intent.category.LAUNCHER">

11

</category></action></intent>

12

</activity>

13

<activity android:name=".PlayerActivity">

14

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...