为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。
android studio创建AIDL服务文件具体步骤如下:
1、要进行创建AIDL的接口之前,需要进行选中当前的项目的文件中,选中完成项目之后。

2、然后进行点击Android studio菜单中的;file”的选项,就会弹出了一个下拉的菜单中;new”选项。

3、就会弹出了一个下一级的菜单中,进行选择下一级菜单中的;AIDL”的选项。

4、就会弹出了一个菜单中,进行点击这个菜单中的;AIDL FILE”的选项。

5、就会弹出了一个AIDL的窗口的选项,需要给接口进行添加名称,在interface name的输入框中进行输入名称,点击”finish;的选项。

6、然后在项目中进行天机了一个aidl的文件,在该文件下中,有一个aidl的后缀的文件,其实就是一个接口文件。

实例:
服务器端:
本例中将建立一个简单的AIDL服务。这个AIDL服务只有一个getValue方法,该方法返回一个String类型的值。在安装完服务后,会在客户端调用这个getValue方法,并将返回值在TextView组件中输出。建立这个AIDL服务的步骤如下:
(1)建立一个aidl文件。在Java包目录中建立一个IMyService.aidl文件。IMyService.aidl文件的位置如图所示。
IMyService.aidl文件的内容如下:
package cn.m9.mobile.aidl;
interface IMyService {
String getValue;
}
IMyService.aidl文件的内容与Java代码非常相似,但要注意,不能加修饰符(例如,public、private)、AIDL服务不支持的数据类型(例如,InputStream、OutputStream)等内容。
(2)如果IMyService.aidl文件中的内容输入正确,ADT会自动生成一个IMyService.java文件。读者一般并不需要关心这个文件的具体内容,也不需要维护这个文件。
(3)编写一个MyService类。MyService是Service的子类,在MyService类中定义了一个内嵌类(MyServiceImpl),该类是IMyService.Stub的子类。MyService类的代码如下:
package cn.m9.mobile.aidl;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
public class MyServiceImpl extends IMyService.Stub {
public String getValue
{
return "Android is very powerful";
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return new MyServiceImpl;
}
}
在编写上面代码时要注意如下两点:
IMyService.Stub是根据IMyService.aidl文件自动生成的,一般并不需要管这个类的内容,只需要编写一个继承于IMyService.Stub类的子类(MyServiceImpl类)即可。
onBind方法必须返回MyServiceImpl类的对象实例,否则客户端无法获得服务对象。
(4)在AndroidManifest.xml文件中配置MyService类,代码如下:
其中"cn.m9.activity.IMyService"是客户端用于访问AIDL服务的ID。
下面来编写客户端的调用代码。首先新建一个Eclipse Android工程(TestAidlClient),并将自动生成的IMyService.java文件连同包目录一起复制到 testAIDL_client工程的src目录中(R文件除外).
调用AIDL服务首先要绑定服务,然后才能获得服务对象,代码如下:
package cn.m9.mobile;
import cn.m9.mobile.R;
import cn.m9.mobile.aidl.IMyService;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class TestAidlClient extends Activity implements OnClickListener {
/** Called when the activity is first created. */
private IMyService myService = null;
private Button btnInvokeAIDLService;
private Button btnBindAIDLService;
private TextView textView;
private static final String TAG="TestAIDLClient";
private ServiceConnection serviceConnection = new ServiceConnection
{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
myService = IMyService.Stub.asInterface(service);
btnInvokeAIDLService.setEnabled(true);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);
btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);
btnInvokeAIDLService.setEnabled(false);
textView = (TextView) findViewById(R.id.textview);
btnInvokeAIDLService.setOnClickListener(this);
btnBindAIDLService.setOnClickListener(this);
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch (view.getId)
{
case R.id.btnBindAIDLService:
//绑定AIDL服务
bindService(new Intent("cn.m9.mobile.aidl.IMyService"), serviceConnection,Context.BIND_AUTO_CREATE);
break;
case R.id.btnInvokeAIDLService:
try{
textView.setText(myService.getValue);
} catch (Exception e)
{
}
break;
}
}
}
在编写上面代码时应注意如下两点:
使用bindService方法来绑定AIDL服务。其中需要使用Intent对象指定AIDL服务的ID,也就是标签中android:name属性的值。
在绑定时需要一个ServiceConnection对象。创建ServiceConnection对象的过程中如果绑定成功,系统会调用onServiceConnected方法,通过该方法的service参数值可获得AIDL服务对象。
首先运行AIDL服务程序,然后运行客户端程序,单击【绑定AIDL服务】按钮,如果绑定成功,【调用AIDL服务】按钮会变为可选状态,单击这个按钮,会输出getValue方法的返回值.
dev c++设置代码字体颜色的方法
如果你是刚接触devc++这款开源工具的小伙伴,那么对于如何修改......
阅读
显卡驱动程序安装指导:如何安装新的显
显卡驱动程序是电脑性能的核心组成部分之一,其正确的安装直......
阅读
win10体验共享是什么
最近很多小伙伴发现win10带有体验共享的功能,却不知道这个功......
阅读
wps演示开启演讲者模式的教程
wps软件是一款很不错的办公软件,是用户办公的好搭档,因此......
阅读
重装win10一直转圈正常吗
我们在重装win10系统的时候,有时候会碰到在重装过程中一直转......
阅读
腾讯视频发布的动态怎么
2022支付宝集福生肖卡怎么
抖音群聊邀请好友方法图
有关为Windows准备PC的提示
欧盟确立 USB Type-C 端口作
Windows11测试人员要当心:
电脑如何防范病毒,就需
电脑网络基础:很实用的
原神笈名海滨怎么解谜 笈
阴阳师强化御魂比赛怎么
阴阳师赏花节猜灯谜活动
盈通显卡支持个人送保吗
小影霸amd显卡驱动下载教
如何在Windows11中修复Wind
旧电脑升级指南:如何进
Excel表格中智能填充的方法
Excel表格隐藏或显示+—按
安卓5.0隐私安全新功能:
win11怎么进入bios的详细教
腾达无线路由器怎么设置
中兴光猫路由器怎么设置
re管理器是什么? re管理器又名RootExplorer,是一款高权限文件管理器,获取Root权限后对系统文件进行操作. 新建文件夹,查看/编辑文件,软件安装,RootExplorer具备普通文件管理器的各项基...
次阅读
三星S6指纹识别设置方法。该功能可用于屏幕锁定、网站登录以及验证三星账户,在此之前您需要先注册您的指纹信息,下面让小编教大家三星S6指纹识别设置方法! 1)首先打开三星S6界面...
次阅读
智能手机功能越来越多,安卓手机的花样层出不穷,今天我们来看看怎么给你的宝贝手机更换字体!对于android手机,美化的方式就更多了,我们先来了解一下如何给手机换个字体,是不...
次阅读
1.在待机页面下,点击【应用程序】。 2.点击【设定】。 3.向上滑动屏幕,点击【电池】。 4.点击屏幕右上角【更多】。 5.点击【隐藏电池电量百分比】即可。 6.电池电量百分比已隐藏...
次阅读
1 首先我们下载安装 ons模拟器 文件,apk格式,直接安装即可。如图: 2 然后我们下载各种ons游戏,一般ons游戏都是一个压缩包,我们将下载下来的游戏文件解压,然后拷贝到手机上(这...
次阅读
OPPO R7怎么插卡?R7怎么装SIM卡?入手OPPO R7第一件要做的事就是插卡了,如果你不知道R7怎么插卡的话,不妨来看下小编的方法吧!希望此教程对大家有所帮助。 1)找到OPPO R7侧边的小孔,插入...
次阅读
小米6亮银探索版多少钱?大家是不是也想知道呢?那么下面绿茶小豆子为大家介绍小米6亮银探索版价格。小米6亮银探索版多少钱?...
次阅读
这位亲,很荣幸为你解答这个问题,来看看下面的教程吧。(^__^) 1)进入手机界面点击设置后再点击【其他连接方式】;(如下图) 2)进入后再点击【网络共享】;(如下图) 3)然后点击【USB共享...
次阅读
打开小米Note【安全中心】,找到并点击【联网控制】,根据所需控制联网应用就行。PS:一般控制【数据】流量即可。(如睛图) 注 :更多精彩教程请关注 手机教程 栏目,手机数码群:...
次阅读
蚂蚁花呗和分期购的区别是什么?相信很多用户对于这种支付方式还不是很清楚,那么分期购和蚂蚁花呗哪个好呢?下文小乐哥给大家介绍一下!...
次阅读
cmwap和cmnet是GPRS网络的两种接入方式。其实上是wap方式和net方式。cm是chinamobile(中国移动)。很 多人都知道这是中国移动提供的两个不同的接入点,但是说到区别,恐怕很多玩家都不是十...
次阅读
基带:Baseband 信源(信息源,也称发终端)发出的没有经过调制(进行频谱搬移和变换)的原始电信号所固有的频带(频率带宽),称为基本频带,简称基带。不同的基带你可以把它想象成调频收音机的...
次阅读
微信深色模式跟随系统开关在哪设置微信深色模式早已经更新,玩家们可以自由设置深色模式的开启,在深色模式中有一个跟随系统,有些用户想要关闭跟随系统,但是不知道怎么设置,下面小...
次阅读
问:安卓手机怎么重命名桌面上的文件夹? 答:那么安卓手机怎样将文件夹重命名呢?单击打开文件夹按住文件夹的标题栏,即可出现重命名对话框。...
次阅读
1)进入X5Max的设置界面,点击【单手操作】,开启【手势调出小屏】右边按钮。(如下图) 2)回到主界面向屏幕内滑动,再滑出屏幕边缘外即可。(如下图)...
次阅读