采用aidl技术去访问远程服务里面的方法

采用aidl技术去访问远程服务里面的方法
本地服务:调用者和访问者在同一个进程里面
远程服务:调用者和访问者在不同的进程里面
建立远程服务:
   新建一个类继承Service,并在Manifest文件中注册.该类中的方法需要暴露出来才能被其他进程调用
     public class MyRemoteService extends Service {
 public String sayHelloInRemoteService(String name ){
return "你好:"+name;
 }
 public class MyBinder extends IService.Stub{

@Override
public String hello(String name) throws RemoteException {
return sayHelloInRemoteService(name);
}
 }
 @Override
 public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyBinder();
 }
 }
   新建一个接口文件,后缀名为aidl,不要public等修饰符.把服务里面的方法都定义到里面.
     package cn.itcast.remoteservice;
 interface IService {
String hello(String name);
 }
   编译后会在gen的目录下生成一个与aidl相对应的.java文件
   远程引用通过隐式意图来调用该服务.所以该服务要配置隐式意图.
     <service android:name=".MyRemoteService">
            <intent-filter >
<action android:name="cn.itcast.remoteservice"/>                
            </intent-filter>
         </service>
   完了就可以布置到模拟器.
建立本地应用去调用刚刚的服务.
   新建一个工程.创建Activity,设置布局文件.
   在OnCreate()里面定义个意图.通过隐式意图去调用刚刚的远程服务.
   通过bindService方法去启动远程服务.
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        et= (EditText) this.findViewById(R.id.et_name);
        Intent intent = new Intent();
        intent.setAction("cn.itcast.remoteservice");
        bindService(intent, new MyConn(), BIND_AUTO_CREATE);
        }
    
    public void click(View view){
     try {
String name = et.getText().toString();
String message = iservice.hello(name);
Toast.makeText(this, message, 1).show();
} catch (RemoteException e) {
e.printStackTrace();
}
    }
    
    public class MyConn implements ServiceConnection{

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//远程服务里面的代理对象
iservice = IService.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
    
    }
   新定义一个包.包名要和远程服务的报名一致.不能错一个字母.
   然后把远程服务里面的aidl文件拷贝到这个包中.在主Activity中完成调用.
先启动远程的服务.然后应用启动本地的应用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值