服务端步骤:
1、新建一个包 在包里新建一个接口MyServiceAIDL(接口名自己取)
代码
//接口前面不要有public 等 不然会报错
interface MyServiceAIDL {
//这个接口内的方法可以自己根据业务需求自己添加相应的方法
//这里简单建一个getData方法
//方法名前面不要有public 等不然会报错
String getData();
}
2、建完好接口需要到找到你新建的接口类,工程保存路径:右击工程-->properties-->右边有个Location位置
根据该位置找到自己刚刚新建的接口类,然后把后缀名改为.aidl 在回到自己工程刷新一下
3、在建一个类继承Service
代码
public class MyService extends Service {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyBindService();
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
//AIDL --> 要继承Stub 而不是Binder
//然后还要在配置清单里添加服务(隐式意图)
class MyBindService extends Stub{
@Override
public String getData() throws RemoteException {
// TODO Auto-generated method stub
return "(跨进程)服务端返回来的消息";
}
}
}
4、在配置清单里注册创建的服务
代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.service.aidl"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- android:exported="true"表示可以跨进程访问
android:enabled="true"表示激活
action 表示客户端要访问在这里的服务的路径action -->
<service android:name=".MyService"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="com.examp.remote.service.MyService"/>
</intent-filter>
</service>
</application>
</manifest>
========================================================
服务端写好后写客户端
客户端步骤:
1、把服务端新建的接口连同包一起拷贝到客户端的源文件(src)下
2、MainActivity.java类
代码
public class MainActivity extends Activity {
private TextView text_info;
private MyServiceAIDL myServiceAIDL;//声明自己建的接口对象
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
//通过Stub.asInterface方法把IBinder返回来的对象转换然后赋值给MyServiceAIDL接口声明的对象
myServiceAIDL = Stub.asInterface(binder);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.text_info = (TextView) this.findViewById(R.id.textview);
bindMyService();//绑定服务
}
private void bindMyService() {
Intent intent = new Intent();
//通过隐式意图来绑定服务
intent.setAction("com.examp.remote.service.MyService");
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
//按钮的事件监听
public void bindRemoteService(View view){
try {
//这里通过自己创建的接口对象来获取服务端的数据
text_info.setText(myServiceAIDL.getData());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果图示例: