利用android-studio工具创建android项目进程之间的通信AIDL的方法总结步骤:
1、创建服务器端的AIDL文件:
studio工具AIDLServer项目右击选择:new--->AIDL-->AIDL File,会在项目的src/main目录下创建一aidl文件,在该文件下创建和package包名一致的文件名,
创建AIDLService.aidl文件,用户可编写自己要实现的方法
2、在项目的build.gradle中,需要指定aidl文件路径,使系统自动为用户编译生成AIDLService.java文件,编辑完成后可在项目中
build/generated/source/aidl/debug目录中查看JAVA源文件。我的代码如下:
注释:这步骤是必须指定的,要不然studio不会为项目编译文件。
3、编写自己的service类,实现AIDL定义的接口(Stub类下的接口)
4、在Manifest.xml文件中配置service,并指定AIDL接口路径。
以上是服务器端AIDL接口的定义
==================================================
------------------------------------------------------------------------------
下面是客户端与服务器端通信,实现AIDL接口,步骤如下:
1、将AIDL文件复制到客户端的项目中
2、复制完成后,路径指定成功后,可以在项目中使用AIDL接口完成进程间的通信。
public class Main extends Activity { private Button bindServiceBtn; private Button invokeServiceBtn; private AIDLService myService = null; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { //获取服务对象 myService = AIDLService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_aidl); bindServiceBtn = (Button) findViewById(R.id.bindService); invokeServiceBtn = (Button) findViewById(R.id.invokeService); bindServiceBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bindService(new Intent("com.test.activity.mytest.AIDLService"), conn, Context.BIND_AUTO_CREATE); } }); invokeServiceBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { myService.registerTestService(); String str = myService.invokeTestCallBack("test successs"); System.out.println("str ..." + str); } catch (RemoteException e) { e.printStackTrace(); } } }); } }
总结:项目中最容易出错的地方,大家注意以下:
1.指定AIDL路径
2.Manifest.xml文件中配置service
3.从服务器端复制AIDL定义的接口到客户端的地方。