Android 如何建立AIDL

一个AIDL的安卓demo,建立一个服务端和一个客户端的通信 报告文档 --郭辉 任务描述 了解android service服务,使用AIDL进行交互; 写一个简单的类似于sayhello的demo,做一个客户端和一个服务器端,两个apk,建立起通信,搞清楚通信流程; 使用bundle作为数据传输,从activity传输信息到达service端; 使用markdown写报告文档,并画出时序图,为期两周。 关于android service 什么是se... 阅读详情
建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:

       (1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见实例52的内容。
       (2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
       (3)建立一个服务类(Service的子类)。
       (4)实现由aidl文件生成的Java接口。
       (5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。

       建立AIDL服务

       本例中将建立一个简单的AIDL服务。这个AIDL服务只有一个getValue方法,该方法返回一个String类型的值。在安装完服务后,会在客户端调用这个getValue方法,并将返回值在TextView组件中输出。建立这个AIDL服务的步骤如下:
      (1)建立一个aidl文件。在Java包目录中建立一个IMyService.aidl文件。IMyService.aidl文件的位置如图

IMyService.aidl文件的内容如下:

Java代码:
package eoe.demo;

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类的代码如下:

Java代码:
package eoe.demo;

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.os.RemoteException;

public class MyService extends Service { 
public class MyServiceImpl extends IMyService.Stub { 
@Override 
public String getValue() throws RemoteException { 
return "Android/OPhone开发讲义"; 
} 
} 
@Override 
public IBinder onBind(Intent intent) { 
return new MyServiceImpl(); 
}

}


       在编写上面代码时要注意如下两点:

       IMyService.Stub是根据IMyService.aidl文件自动生成的,一般并不需要管这个类的内容,只需要编写一个继承于IMyService.Stub类的子类(MyServiceImpl类)即可。

       onBind方法必须返回MyServiceImpl类的对象实例,否则客户端无法获得服务对象。

       (4)在AndroidManifest.xml文件中配置MyService类,代码如下:

Java代码:
<service android:name=".MyService" > 
<intent-filter> 
<action android:name="net.blogjava.mobile.aidl.IMyService" /> 
</intent-filter> 
</service> 


        下面来编写客户端的调用代码。首先新建一个Eclipse Android工程(ch08_aidlclient),并将自动生成的IMyService.java文件连同包目录一起复制到ch08_aidlclient工程的src目录中,如图所示。


       调用AIDL服务首先要绑定服务,然后才能获得服务对象,代码如下:


Java代码:
package net.blogjava.mobile;

import net.blogjava.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.view.View; import android.view.View.OnClickListener; 
import android.widget.Button; import android.widget.TextView;

public class Main extends Activity implements OnClickListener { 
private IMyService myService = null; 
private Button btnInvokeAIDLService; 
private Button btnBindAIDLService; 
private TextView textView; 
private ServiceConnection serviceConnection = new ServiceConnection() { 
@Override 
public void onServiceConnected(ComponentName name, IBinder service) { 
// 获得服务对象 
myService = IMyService.Stub.asInterface(service); 
btnInvokeAIDLService.setEnabled(true); 
} 
@Override 
public void onServiceDisconnected(ComponentName name) { 
} 
}; 
@Override 
public void onClick(View view) { 
switch (view.getId()) { 
case R.id.btnBindAIDLService: 
// 绑定AIDL服务 
bindService(new Intent("net.blogjava.mobile.aidl.IMyService"), serviceConnection, Context.BIND_AUTO_CREATE); 
break; 
case R.id.btnInvokeAIDLService: 
try { 
textView.setText(myService.getValue()); 
// 调用服务端的getValue方法 
} catch (Exception e) { 
} 
break; 
} 
} 
@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); 
}

} 

Android 浅度解析:AIDL & Binder (1) 本文介绍了Android中的AIDL(Android Interface Definition Language),它是一种类似于其他IDL(接口定义语言)的语言,它可以让定义一个接口,这个接口中声明的方法可以在不同的进程中调用。 阅读详情

相关推荐

手把手教你解决CentOS sshd启动报错:从权限问题到目录缺失的全套解决方案

本文提供了一套完整的CentOS SSH服务启动故障排查与修复方案。针对sshd启动报错,从systemd日志分析、sshd -t配置测试入手,详细解决了私钥文件权限过宽(如0644错误)和权限分离目录缺失等典型问题,并附带了扩展排查清单,帮助运维人员系统性地定位和解决连接故障。

weixin_29248611的博客 152

AIDL File (Requires settings the buildFeatures.aidl to true in the build file) 为灰色状态不能点击

在Android studio中依次点击File->New->AIDL,显示AIDL File (Requires settings the buildFeatures.aidl to true in the build file) 为灰色状态不能点击。在app的build.gradle文件中android标签下加入。

qq_38035226的博客 1865

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 400

Android 右键 new AIDL 无法选择

【代码】Android 右键 new AIDL 无法选择。

qq_27400335的博客 617

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8101

A Mathematical Framework for Transformer Circuits—(二)

transformer数学理论框架

qq_42208244的博客 757

android Aidl原理分析

android Aidl原理分析 aidl的创建 server端使用 Client的使用 aidl是为了解决进程间通信的,也是binder的最好体现,下面分析一下:先是aidl文件的创建interface testtt{ /** * Demonstrates some basic types that you can use as parameters * and ret

ahjxly的专栏 516

IEEE Transactions模板中参考文献作者缩写、期刊名缩写

本文章记录如何在IEEE Transactions的模板中,解决参考文献的作者缩写、期刊名字缩写的问题。

weixin_43981621的博客 1万+

Android如何建立aidl

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:        (1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见实例52的内容。        (2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。        (3)建立一个服务类(Ser

joeyaung_1983的专栏 797

【实战】Python 携程酒店价格实时抓取爬虫项目全解析

摘要:本文介绍了一个基于Python的携程酒店价格实时抓取系统开发方案。系统采用Requests、BeautifulSoup和Selenium等技术栈,实现了多城市、多日期的酒店数据采集,包括价格、评分、位置等关键信息。通过请求头伪装、IP代理、随机等待等反爬策略,有效应对携程的反爬机制。系统支持数据清洗、去重和CSV/Excel导出,并提供了多线程优化、代理池集成等进阶方案。本文详细阐述了技术原理、代码实现和优化策略,同时强调了数据采集的合法合规性,为旅游行业数据分析提供了可靠的数据获取方案。

2503_91057718的博客 2604

12、多端神经形态晶体管:原理、应用与算法探索

本文综述了多端神经形态晶体管的原理、应用与算法探索。从神经元MOS晶体管的发展到基于电解质栅极晶体管(EGT)的新型器件设计,系统阐述了其在低电压、多功能逻辑运算和突触行为模拟方面的优势。重点介绍了其在化学生物传感器(如多巴胺和pH检测)中的高灵敏度应用,以及在树突整合、时空总和、动态逻辑和神经元算术等树突算法中的实现。文章还总结了该类器件在神经形态计算、智能传感等领域的广阔前景,并分析了当前面临的材料工艺、理论建模与系统集成挑战,展望了未来发展方向。

delta的博客 143

建立android的AIDL服务的过程

建立AIDL服务的步骤: 建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下: (1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见后面实例的内容。 (2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。 (3)建立一个服务类(Serv

TonyJiang08的专栏 695

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

AI赋能,使用DeepSeek 高效制作PPT实战详解

congge 1万+

[转]Android 如何建立AIDL

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下: (1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见实例52的内容。 (2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。 (3)建立一个服务类(Serv...

weixin_30379973的博客 75

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android aidl的建立

Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service的启动有两种方式:context.startService()和context.bindService()。   使用context.startService() 启动Service是会会经历: context.startServ

hellolinshoujie的专栏 541

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Android NotificationManager 和Notification的使用总结
下一篇: WindowManager.LayoutParams类
Android_Discover
博客等级 码龄15年 7粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值