在网上找的一些关于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的基本概念是必要的。AIDL定义了一种接口,这个接口可以被多个进程共享,允许一个进程(如Service)...
本文将详细介绍如何使用AIDL调用WPS for Android,并涉及相关的jar文件。 首先,`moffice-aidl.jar`和`moffice-event-interface.jar`是WPS Office为开发者提供的API库,它们包含了与WPS进行通信所需的方法和事件...
本示例"一个及其简单的AIDL远程Service调用"展示了如何通过AIDL在客户端(TestAidlClient)与服务端(TestAidlService)之间建立通信,实现远程调用。 首先,我们需要理解Service的基本概念。在Android中,Service...
- Client需要导入生成的`IBidirectionalCall`接口,然后在需要调用Service的地方,通过`bindService()`方法连接Service,并传入一个实现了`ServiceConnection`接口的类。在这个类中,重写`onServiceConnected()`...
在"android简单AIDL调用Demo"中,我们将深入探讨如何使用AIDL创建和调用跨进程服务。 首先,让我们了解AIDL的基本结构。AIDL文件是一个简单的文本文件,后缀为.aidl,它定义了接口以及接口中的方法。例如,如果你有...
6. 当我们需要与Service通信时,就可以通过`mService`对象调用Service中定义的方法。注意,由于是跨进程通信,所有方法调用都是异步的,不能直接得到结果,需要通过回调或者其他方式处理。 7. 不要忘记在Activity中...
本示例"aidl调用服务的例子"将详细阐述如何通过AIDL在客户端(client)和服务端(service)实现高效的数据通信。 首先,我们来看服务端部分。在`aidlservice`目录下,通常会包含一个`.aidl`文件,例如`IService....
本示例"AIDLService"包含服务端与客户端两个工程文件,提供了关于如何使用AIDL进行远程服务调用的实践教程。 一、AIDL基础 AIDL文件本质上是定义了一个接口,该接口包含了客户端和服务端之间可以交互的方法。AIDL...
本篇文章将深入探讨如何使用AIDL调用远程服务,以及在实际应用中的操作步骤。 首先,我们需要理解AIDL的基本概念。AIDL是一种接口定义语言,它允许我们定义在不同进程间通信的接口。这些接口可以包含方法声明,参数...
因此,应谨慎设计服务的接口,避免频繁的AIDL调用。 9. **安全性**: 使用AIDL的服务暴露了其接口给其他应用,可能带来安全风险。开发者需要确保只有授权的应用才能访问服务,可以通过AndroidManifest.xml中的权限...
通过上述步骤,你可以在“RemoteServiceClientDemo”项目中实现一个简单的AIDL调用外部服务的示例。这个项目中,服务端提供一个`sendMessage()`方法,客户端则通过绑定服务来调用该方法,从而实现跨进程通信。理解和...
通过AIDL,服务端可以暴露方法供客户端调用,实现数据的传递。AIDL文件通常以`.aidl`为后缀,它定义了方法签名、参数类型以及返回值类型。 ### 2. AIDL文件结构 一个简单的AIDL文件包含以下几个部分: - **接口...
当一个应用(如A.apk)通过AIDL定义接口后,Android系统会自动生成相应的Java绑定类,使得其他应用(如B.apk)能够调用这些接口。 **1. 创建AIDL文件** 在A.apk的源码目录下创建一个.aidl文件,例如`IAidlInterface...
在onServiceConnected()回调中,你会得到一个实现了AIDL接口的IBinder对象,你可以通过这个对象调用服务端的方法。 5. **跨进程调用** - 调用IBinder对象的方法时,Android系统会自动处理跨进程通信,将调用转化为...
在"AIDLService,远程调用例子"这个项目中,我们将深入理解AIDLService的工作原理,通过服务端和客户端两个工程文件的实践,来探讨如何实现这种跨进程的通信。 **一、AIDL的基本概念** AIDL是Android特有的接口定义...
3. **进程间通信**: 当一个服务(Service)通过AIDL暴露其接口时,客户端可以通过Binder机制来调用服务端的方法,实现数据交换。 4. **生成代码**: 编译AIDL文件后,Android编译系统会自动生成对应的Java接口和Stub...
本教程通过一个"AIDL 实现Service 双向 通讯 Demo"来详细解释如何使用AIDL进行双向通信。 首先,理解AIDL的基本概念。AIDL类似于Java的接口定义,但它的作用是定义一个可以在不同进程间调用的方法。当一个服务需要...
为了让客户端能够调用Service中的`startDownload()`方法,我们需要在客户端应用中注册一个AIDL接口的实现,并通过Binder机制连接到服务。在客户端中,我们可以通过`bindService()`方法启动并连接到服务,然后调用`...
服务端启动服务并绑定到特定的Binder,客户端通过`startService()`或`bindService()`来连接服务,然后调用AIDL定义的方法。 ### 7. 异常处理 由于IPC调用可能因为各种原因失败,如服务未运行、权限问题等,因此在...
在某些情况下,你可能需要通过AIDL在Java层调用一个使用JNI实现的函数。例如,服务端通过AIDL暴露一个接口,而这个接口的方法在JNI中实现,以利用C/C++的性能优势。客户端通过调用AIDL接口,间接地触发JNI中的操作。...