Android Studio 如何使用Service 的AIDL
我们在eclipse使用aidl后,但是在android studio使用aidl和eclipse还是不同的,但是也比较简单,使用如下:
service服务端的创建
第一步创建aidl文件如下图
创建好as自动生成如下的样子
然后我们在aidl文件里写一个方法:
创建完一定重新build,系统才会生成对应的java文件!!!一般看不到,我们选择pacage即可看到,如下图
第二步写service
public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { Log.v("sss","bangding"); return new MyBinder(); } class MyBinder extends IMIn.Stub {//调用aidl文件的sub(相当于 class MyBinder extends Binder implents IMIn,此处和eclipse使用aidl用的一样) @Override public void pp() throws RemoteException { Log.v("AAAAAAAAAAA","QIDONGLE----------------"); } }
fest文件中service配置如下
第三步MainActivity开启服务
注意客户端使用aidl前一定要部署运行此服务端
客户端的调用
第一步创建相同名称,并在和服务端相同的包下
建议:在main文件下创建aidl文件夹,然后在aidl文件夹下面创建包(直接把服务端放aidl文件的包名复制过来),然后在包下创建aidl 文件(我们此处建IMIn.aidl),和服务端aidl文件一样(名称和里面的方法)
创建完一定重新build
第二步MainActivity调用
public class MainActivity extends AppCompatActivity {
Button btn;
Button btn2;
IMIn imIn;//AIDL文件类
private MyserviceConn conn;//ServiceConnection对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
conn = new MyserviceConn();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
//由于5.0之后不能使用隐式启动,所以此处要加入服务端包名
intent.setAction(“com.itheima.remote”); intent.setPackage(“testsqileandcontentprovider.siqiyan.com.testservice”);
bindService(intent,conn,BIND_AUTO_CREATE);
}
});
}
//创建ServiceConnection对像
class MyserviceConn implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//把Ibinder中间人对象强转成publicbusiness
imIn = IMIn.Stub.asInterface(service);//此处把service转化为aidl对象
try {
imIn.pp();//调用服务端service的aidl方法
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
}
运行如下:
我们服务端service里面实现的方法:
客户端运行结果: