AIDL :Android Interface Define Language(Android接口定义语言)
主要用于多应用进程间通信
通过Android来进行数据通信
默认支持的数据类型:
1、基本数据类型(int ,long, boolean, double, float, byte char ) <不支持short>
2、String,CharSequence
3、List,Map
4、Parcelable
案例–简单传值:
客户端与服务端通讯,处理后返回客户端数据
实现原理:
1、需要一个ServiceAPP、一个ClientAPP;
2、两个app都需要创建aidl,两个APP中相同的文件位置、相同包名下的.aidl文件
3、ServiceAPP中需要创建一个Service
4、ClientAPP中需要绑定服务,并获取连接返回参数
ServiceApp:
1、AidlService.java
2、mian->aidl->包名->IMyAidlInterface.aidl
源代码:
//记得注册Service
public class AidlService extends Service {
public AidlService() {
}
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
private IBinder iBinder = new IMyAidlInterface.Stub() {
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public int add(int num1, int num2) throws RemoteException {
Log.e("chenxh","收到遠程數據"+num1+" "+num2);
return num1+num2+num2;
}
};
}
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
int add(int num1,int num2);
}
ClientAPP:
1、需要将ServiceAPP下的aidl整个复制到同样目录下
2、需要在MainActivity做一些处理,绑定服务,并开启服务回调
源代码:
class MainActivity : AppCompatActivity() {
private var myAidl: IMyAidlInterface? = null
private var intentService: Intent? = null
private val conn = object : ServiceConnection {
//绑定服务,回调onBind()方法
@SuppressLint("WrongConstant")
override fun onServiceConnected(name: ComponentName, service: IBinder) {
myAidl = IMyAidlInterface.Stub.asInterface(service)
Toast.makeText(this@MainActivity, myAidl!!.add(4, 5).toString(), Toast.LENGTH_LONG).show()
}
override fun onServiceDisconnected(name: ComponentName) {
myAidl = null
}
}
@SuppressLint("WrongConstant")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initViewControl()
intentService = Intent()
intentService!!.setComponent(ComponentName("com.xx.xx.umsaidldemo", "com.xx.xx.umsaidldemo.AidlService"))