`
isiqi
  • 浏览: 16482764 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

通过AIDL调用Service

阅读更多
在网上找的一些关于service的例子都比较简单,都是通过startService("action")启动service,然后通过stopService("service")停止service。只能启动和停止service没有发挥service的功能。下面我通过介绍关于AIDL启动service来控制音乐播放的例子来说明通过前台控制service的使用。
1.在工程的包中一个后缀为aidl的文件
IMusicControlService.aidl

package com.dream.androidstud2.service;--------包名一定要和当前工程的包名一样哦!

interface IMusicControlService
{
void playMusic(); -------->播放音乐
void stopMusic(); ------->停止播放音乐
}

点击保存后,在 gen/上述包名的目录下就创建了一个IMusicControlService.java文件了
2.在res/layout目录下创建布局文件:
startserviceactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv_main"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textSize="18px"/>

<Button
android:text="播放音乐"
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<Button
android:text="停止播放"
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>
3.创建一个service类,在该类的内部实例化IMusicControlService中的playMusic()和stopMusic()接口
private final IMusicControlService.Stub binder=new IMusicControlService.Stub()
{

@Override
public void playMusic() throws RemoteException {
// TODO Auto-generated method stub

player=MediaPlayer.create(ControlMusicService.this, R.raw.shanghaitan);
player.start();
}

@Override
public void stopMusic() throws RemoteException {
// TODO Auto-generated method stub

if(player.isPlaying())
{
player.stop();
}
}

};
在该类的onBind()方法中返回上面实例的binder,即 return binder;
4.创建StartServiceActivity类继承Activity类,在该类中通过ServiceConnection和后台的service连接
private final ServiceConnection serviceConnection=new ServiceConnection()
{

//第一次连接service时会调用这个方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub


iMusicControlService=IMusicControlService.Stub.asInterface(service);

}

//service断开的时候会调用这个方法
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
System.out.println("service unconntection");
iMusicControlService=null;

}

};

在oncreate方法中绑定service:
Intent intent = new Intent();
intent.setClass(StartServiceActivity.this,ControlMusicService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
在点击playmusic按钮被点击时,执行如下代码
iMusicControlService.playMusic();
在点击stopmusic按钮被点击时,执行如下代码:
iMusicControlService.stopMusic();
unbindService(serviceConnection);

好了这样就通过在Activity中通过aidl控制service了。
分享到:
评论

相关推荐

    通过aidl service调用activity

    本篇将深入探讨如何通过AIDL来调用Service,并进而启动Activity,以及相关的源码分析和工具使用。 首先,理解AIDL的基本概念是必要的。AIDL定义了一种接口,这个接口可以被多个进程共享,允许一个进程(如Service)...

    wps for android AIDL调用

    本文将详细介绍如何使用AIDL调用WPS for Android,并涉及相关的jar文件。 首先,`moffice-aidl.jar`和`moffice-event-interface.jar`是WPS Office为开发者提供的API库,它们包含了与WPS进行通信所需的方法和事件...

    一个及其简单的AIDL远程Service调用

    本示例"一个及其简单的AIDL远程Service调用"展示了如何通过AIDL在客户端(TestAidlClient)与服务端(TestAidlService)之间建立通信,实现远程调用。 首先,我们需要理解Service的基本概念。在Android中,Service...

    使用AIDL实现Service与Client绑定后的双向调用

    - Client需要导入生成的`IBidirectionalCall`接口,然后在需要调用Service的地方,通过`bindService()`方法连接Service,并传入一个实现了`ServiceConnection`接口的类。在这个类中,重写`onServiceConnected()`...

    android简单AIDL调用Demo

    在"android简单AIDL调用Demo"中,我们将深入探讨如何使用AIDL创建和调用跨进程服务。 首先,让我们了解AIDL的基本结构。AIDL文件是一个简单的文本文件,后缀为.aidl,它定义了接口以及接口中的方法。例如,如果你有...

    Activity中使用AIDL让Service与Activity通信

    6. 当我们需要与Service通信时,就可以通过`mService`对象调用Service中定义的方法。注意,由于是跨进程通信,所有方法调用都是异步的,不能直接得到结果,需要通过回调或者其他方式处理。 7. 不要忘记在Activity中...

    aidl调用服务的例子

    本示例"aidl调用服务的例子"将详细阐述如何通过AIDL在客户端(client)和服务端(service)实现高效的数据通信。 首先,我们来看服务端部分。在`aidlservice`目录下,通常会包含一个`.aidl`文件,例如`IService....

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

    本示例"AIDLService"包含服务端与客户端两个工程文件,提供了关于如何使用AIDL进行远程服务调用的实践教程。 一、AIDL基础 AIDL文件本质上是定义了一个接口,该接口包含了客户端和服务端之间可以交互的方法。AIDL...

    aidl调用远程服务

    本篇文章将深入探讨如何使用AIDL调用远程服务,以及在实际应用中的操作步骤。 首先,我们需要理解AIDL的基本概念。AIDL是一种接口定义语言,它允许我们定义在不同进程间通信的接口。这些接口可以包含方法声明,参数...

    aidl.rar_AIDL_AIDL.rar_android AIDL service_android service_andr

    因此,应谨慎设计服务的接口,避免频繁的AIDL调用。 9. **安全性**: 使用AIDL的服务暴露了其接口给其他应用,可能带来安全风险。开发者需要确保只有授权的应用才能访问服务,可以通过AndroidManifest.xml中的权限...

    android 进程之间通信--Android 使用【AIDL】调用外部服务

    通过上述步骤,你可以在“RemoteServiceClientDemo”项目中实现一个简单的AIDL调用外部服务的示例。这个项目中,服务端提供一个`sendMessage()`方法,客户端则通过绑定服务来调用该方法,从而实现跨进程通信。理解和...

    AIDL 远程调用实例

    通过AIDL,服务端可以暴露方法供客户端调用,实现数据的传递。AIDL文件通常以`.aidl`为后缀,它定义了方法签名、参数类型以及返回值类型。 ### 2. AIDL文件结构 一个简单的AIDL文件包含以下几个部分: - **接口...

    使用AIDL通过进程APK之间通信

    当一个应用(如A.apk)通过AIDL定义接口后,Android系统会自动生成相应的Java绑定类,使得其他应用(如B.apk)能够调用这些接口。 **1. 创建AIDL文件** 在A.apk的源码目录下创建一个.aidl文件,例如`IAidlInterface...

    Android调用远程服务(AIDL)

    在onServiceConnected()回调中,你会得到一个实现了AIDL接口的IBinder对象,你可以通过这个对象调用服务端的方法。 5. **跨进程调用** - 调用IBinder对象的方法时,Android系统会自动处理跨进程通信,将调用转化为...

    AIDLService,远程调用例子

    在"AIDLService,远程调用例子"这个项目中,我们将深入理解AIDLService的工作原理,通过服务端和客户端两个工程文件的实践,来探讨如何实现这种跨进程的通信。 **一、AIDL的基本概念** AIDL是Android特有的接口定义...

    AIDL_AidlService_android_

    3. **进程间通信**: 当一个服务(Service)通过AIDL暴露其接口时,客户端可以通过Binder机制来调用服务端的方法,实现数据交换。 4. **生成代码**: 编译AIDL文件后,Android编译系统会自动生成对应的Java接口和Stub...

    AIDL 实现Service 双向 通讯 Demo

    本教程通过一个"AIDL 实现Service 双向 通讯 Demo"来详细解释如何使用AIDL进行双向通信。 首先,理解AIDL的基本概念。AIDL类似于Java的接口定义,但它的作用是定义一个可以在不同进程间调用的方法。当一个服务需要...

    AIDL_service_下载文件

    为了让客户端能够调用Service中的`startDownload()`方法,我们需要在客户端应用中注册一个AIDL接口的实现,并通过Binder机制连接到服务。在客户端中,我们可以通过`bindService()`方法启动并连接到服务,然后调用`...

    aidl调用方法文档资料

    服务端启动服务并绑定到特定的Binder,客户端通过`startService()`或`bindService()`来连接服务,然后调用AIDL定义的方法。 ### 7. 异常处理 由于IPC调用可能因为各种原因失败,如服务未运行、权限问题等,因此在...

    AIDL和JNI使用的小例子

    在某些情况下,你可能需要通过AIDL在Java层调用一个使用JNI实现的函数。例如,服务端通过AIDL暴露一个接口,而这个接口的方法在JNI中实现,以利用C/C++的性能优势。客户端通过调用AIDL接口,间接地触发JNI中的操作。...

Global site tag (gtag.js) - Google Analytics