导引:
AIDL:Android Interface Definition Language,就是Android接口定义语言,为了实现两个app进程间数据通信
流程:所谓的C/S模式,客户端©+服务端(S)
释义:
AIDL:通过新建AIDL文件,build->make project生成.java文件,完成CS间的通信,但是我们最终关注的是android端通过AIDL调用别人的数据.
1:在java 源码同级目录新建aidl目录,先新建同服务器端相同包名的包new-folder-aidl folder,再新建Aidl文件new-aidl-aidl file,比如FService.aidl,保存后build-make project会自动在generated里生成FService.java文件,不用太关注里面什么东西
package com.Service.aidl;
interface FService{
int open(int num);
}
2:定义MyService完成FService的绑定和解绑,并在AndroidManifest.xml中注册
<service android:name=".service.MyService">
<intent-filter>
<action android:name="com.aile.device_service" />
</intent-filter>
</service>
public class MyService extends Service {
private static FService fService;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
fService= null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
fService= FService .Stub.asInterface(service);
}
};
public void connectDevice(Context paramContext) throws Exception {
if (fService== null) {
Intent intent = new Intent();
intent.setPackage("com.aile.ware");
intent.setAction("com.aile.device_service");
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
}
}
private void disconnectDevice() {
if (fService!= null) {
try {
unbindService(serviceConnection);
} catch (Exception e) {
e.printStackTrace();
} finally {
fService= null;
}
}
}
public static FService getFService() {
return fService;
}
@Override
public void onCreate() {
super.onCreate();
try {
connectDevice(this);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onDestroy() {
super.onDestroy();
disconnectDevice();
}
public boolean onUnbind(Intent paramIntent) {
disconnectDevice();
return false;
}
}
3:在mainactivity启动service
startService(new Intent(this, MyService .class));
4:在需要的activity中完成调用
MyService .getFService().open(50);
好了,结束