AIDL使用demo
服务端:
-
AS 创建一个app,作为服务端
-
在app目录下创建AIDL,自动生成aidl文件夹,Interface根据功能自定义
-
rebuild工程
-
java目录下添加AIDL Interface实现类作为接口功能接口实现类,供客户端new对象并使用服务端的功;再创建一个service实现类,供客户端实现,连接service
-
安装到测试设备上
客户端:
-
AS创建一个app,作为客户端
-
将服务端工程目录下的aidl文件直接拷贝到客户端,对应目录为main目录下,即和java同级
-
rebuild工程
-
TestActity下绑定服务
demo主要部分
*** service端:
/*测试,功能在于输出一串字符串*/
interface IMyAidlInterface {
void printStr(String str);
}
/*测试,功能在于输出一串字符串*/
interface IMyAidlInterface {
void printStr(String str);
}
/*interface实现类,提供给客户端new对象并使用自定义接口的功能*/
public class IMyAidlInterfaceImp extends IMyAidlInterface.Stub{ //基础类,SimpleInterface.Stub对象,固定写法
@Override
public void printStr(String str) throws RemoteException {
str = "new str";
Log.d("oy", "str==" + str);
}
}
/*服务对象,用于return interfaceImp,客户端通过绑定服务,获取interfaceImp,从而使用interface的功能*/****客户端
public class IMyAidlInterfaceService extends Service {
Binder binder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
/*存在服务启动,客户端绑定服务失败的情况,判空处理,反复检查是否为空,返回binder对象*/
if (binder==null){
binder = new IMyAidlInterfaceImp();
Log.d("oy", "IMyAidlInterfaceService onBind");
}
return binder;//将AIDL接口的实现类发回给绑定了服务的对象
}
}
public class MainActivity extends AppCompatActivity {
IMyAidlInterface mInterface;
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("oy", "服务绑定成功");
mInterface = IMyAidlInterface.Stub.asInterface(service);//固定写法,将IBinder对象转型为SimpleInterface.Stub对象
try {
mInterface.printStr("printed str");
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
mInterface = null;
Log.d("oy", "服务绑定断开");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setClassName("com.tripod.myapplication", "com.tripod.myapplication.IMyAidlInterfaceService");
bindService(intent, conn, BIND_AUTO_CREATE); //传递参数,绑定服务
}
}
标签:AIDL,demo,void,绑定,str,使用,public,客户端 From: https://www.cnblogs.com/a-n-yan/p/16952728.html