1 AIDL(Android Interface Definition Language):接口定义语言。
2 当需要在不同的进程之间传递对象时,比如在不同的应用之间传递对象的时候,就需要使用AIDL。
3 AID使得一个应用能够调用另一个应用的服务。
这里用的开发工具是Android Studio,在main文件夹下创建aidl文件夹,和java文件夹同级,在aidl文件夹中创建包,包名与应用包名必须一致,最后创建aidl文件:PeopleServiceAIDL.aidl
package com.miquan.demo;
// AIDL其实就是一个接口,定义了通讯的规则。
interface PeopleServiceAIDL {
String findPeople(int num);
}
此时点击Android Studio菜单中的Build > Make Module xxx,然后就会生成一个对应的类了。具体位置:build > generated > source > aidl > debug > xxx
PeopleService.java
package com.miquan.demo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class PeopleService extends Service {
private IBinder mBinder = new PeopleServiceBinder();
public PeopleService() {
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
private final class PeopleServiceBinder extends PeopleServiceAIDL.Stub {
@Override
public String findPeople(int num) throws RemoteException {
return num == 0 ? "王尼玛" : "唐马儒";
}
}
}
在清单文件中配置Service(用隐式启动):
<service android:name=".PeopleService">
<intent-filter>
<action android:name="com.miquan.demo.people.service"/>
</intent-filter>
</service>
至此服务端完成了。
首先要以同样的方法创建aidl文件,或者复制过来,要对应的。
package com.miquan.as3;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.widget.Button;
import com.miquan.demo.PeopleServiceAIDL;
public class MainActivity extends Activity {
private Button mButton;
private PeopleServiceAIDL mPeopleServiceAIDL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
// 这里得到的name就是从另外一个应用中的服务得到的
String name = mPeopleServiceAIDL.findPeople(0);
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
bindService(new Intent("com.miquan.demo.people.service"), mServiceConnection, BIND_AUTO_CREATE);
}
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mPeopleServiceAIDL = PeopleServiceAIDL.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
mPeopleServiceAIDL = null;
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(mServiceConnection);
}
}
原文:http://blog.csdn.net/qiantujava/article/details/46486305