服务端
1.新建一个IStudent 的aidl文件
interface IStudent {
String getInfo(String info);
}
2.新建一个服务类
public class HonService extends Service {
public HonService() {
}
public class MyBinder extends IStudent.Stub {
@Override
public String getInfo(String info) throws RemoteException {
return info;
}
}
@Override
public IBinder onBind(Intent intent) {
Log.e("HonService", "onBind");
return new MyBinder();
}
@Override
public void onCreate() {
super.onCreate();
Log.e("HonService", "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
服务类的注册
<service android:name=".HonService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.onepro.HonService"/>
</intent-filter>
</service>
找不到AIDL,在gradle提供AIDL的路径
sourceSets{
main{
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java', 'src/main/aidl']
resources.srcDirs = ['src/main/java', 'src/main/aidl']
aidl.srcDirs = ['src/main/aidl']
res.srcDirs = ['src/main/res']
assets.srcDirs = ['src/main/assets']
}
}
客户端
绑定服务,这里指出服务端的服务
Intent mIntent = new Intent(Intent.ACTION_MAIN);
ComponentName componentName = new ComponentName(
"com.example.onepro",
"com.example.onepro.HonService");
mIntent.setComponent(componentName);
bindService(mIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
建立连接
private IStudent its;//导包和服务端相同
private ServiceConnection mServiceConnection =new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
its=IStudent.Stub.asInterface(iBinder);
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
客户端调用服务端的接口方法
public void testOne(View view) throws RemoteException {
String test=its.getInfo("111");
Log.d("--data-- "," test="+test);
}
遇到的坑,安卓sdk30以上的还是没有连接上 。
在客户端的列表清单加
<queries>
<package android:name="com.example.onepro" />
</queries>