82324899 2015-05-18
建立两个module,一个是AIDL服务,另一个是客户端。
AS的module就相当于Eclipse里面的project,AS的project相当于Eclipse的Workspace。
一。服务端
1.建立模块module1
2.在module1工程下,在module1\src\main\下建立aidl文件夹,再建立一个和AndroidManifest里面包名一样的包,
module1\src\main\aidl\interview\cchen\module1,里面建立AIDL文件
路径方法必须这样,然后编译工程。
会在module1\build\generated\source\aidl\debug\interview\cchen\module1路径下,生成与AIDL对应的java接口文件。
这个Java文件时自动生成的,最好不要手动修改,想修改接口,直接修改AIDL文件即可。
3.实现AIDL的接口
public class Service1 extends Service { private int mCount; IMyAidlInterface1.Stub binder = new IMyAidlInterface1.Stub() { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public String getValue() throws RemoteException { return mCount++ + " times"; } @Override public void clear() throws RemoteException { mCount = 0; } }; public Service1() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return binder; } }
4.修改module1的gradle文件,第一行改为applyplugin:'com.android.library',作为一个库工程,同时去掉applicationId。
二。客户端
1.建立模块module1_client
2.修改module1_client的gradle文件,在dependencies中添加compileproject(':module1'),引用module1
3.可以通过AIDL和Service1通讯
private IMyAidlInterface1 mService1; ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mService1 = IMyAidlInterface1.Stub.asInterface(service); updateFromAidl(); } @Override public void onServiceDisconnected(ComponentName name) { mService1 = null; } }; private void updateFromAidl() { try { String fromAidl = mService1.getValue(); txt1.setText(fromAidl); } catch (Exception e) { e.printStackTrace(); } }