什么是AIDL:Android Interface definition language,android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
有什么用途:用于不同进程中数据的交换
实现步骤:
1.在com.aidl包下建立 IMyAidl.aidl
.aidl文件的内容与Java代码非常相似,但要注意,不能加修饰符(例如,public、private)、AIDL服务不支持的数据类型(例如,InputStream、OutputStream)等内容。
package com.aidl;
interface IMyAidl{
String getValue();
}
2.编译后在gen下生成了对应的.java文件
3.编写一个service,好像aidl都要配合service来使用,里面实现了IMyAidl.Stub
public class MyService extends Service{
public class MyAidl extends IMyAidl.Stub{
@Override
public String getValue() throws RemoteException {
// TODO Auto-generated method stub
return "aidl test";
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyAidl();
}
}
配置service
<service android:name=".MyService">
<intent-filter >
<action android:name="com.aidl.IMyAidl"/>
</intent-filter>
</service>
4.在activity通过bindService( service, conn, int flags)方法绑定服务,得到IMyAidl,调用getValue(),这样activity就可以得到从service传来的值了。
public class AIDLTestActivity extends Activity {
private IMyAidl aidl;
private TextView tx;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 通过服务获得里面的定义的MyAidl类
aidl = IMyAidl.Stub.asInterface(service);
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tx = (TextView)findViewById(R.id.tx);
Button bt1 = (Button)findViewById(R.id.bt1);
Button bt2 = (Button)findViewById(R.id.bt2);
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//绑定服务
bindService(new Intent("com.aidl.IMyAidl"), conn, Context.BIND_AUTO_CREATE);
}
});
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (aidl!=null) {
try {
//通过IMyAidl得到service传来的值
tx.setText(aidl.getValue());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
}
总结: 这里简单练习下,在静默安装和拦截电话都用到aidl,有空再写这些例子练习了。
分享到:
相关推荐
Android关于AIDL的练习,分为服务端和客户端两个项目。原博客地址:https://blog.csdn.net/u010356768/article/details/79815960
android studio项目
AIDL的小demo
附件为个人练习android md5加密和cidl通信demo,里面有详细知识点的参考链接,请参阅read_me文档,喜欢的小伙伴请点个赞,谢谢!
就是一个方便开发aidl的接口aar包,用户可以快速集成aidl跨进程开发
AIDL_A_02 实验室练习
6.4 AIDL深入练习 6.4.1 服务端实现 6.4.2 客户端实现 6.5 系统服务 6.5.1 获得系统服务 6.5.2 获取屏幕分辨率 6.5.3 剪贴板服务 6.5.4 电话服务 6.5.5 定时提醒服务 6.5.6 音频服务 6.5.7 传感器服务 6.5.8 位置...
AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别; Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用; 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等; 事件分发:弹性...
5.5 练习使用GET_CONTENT操作 5.6 挂起的Intent 5.7 资源 5.8 小结 第6章 构建用户界面和使用控件 6.1 Android中的UI开发 6.1.1 完全利用代码来构建UI 6.1.2 完全使用XML构建UI 6.1.3 使用...
5.5 练习使用GET_CONTENT操作 5.6 挂起的Intent 5.7 资源 5.8 小结 第6章 构建用户界面和使用控件 6.1 Android中的UI开发 6.1.1 完全利用代码来构建UI 6.1.2 完全使用XML构建UI 6.1.3 使用...