您的位置:首页 > 其它

服务之远程服务

2015-11-02 10:32 253 查看
package com.example.myservice;
/**
* 服务端
* ①利用android接口定义语言 Android Interface Definition Language(AIDL)
*  进行远程服务的连接
*  】步骤
*  ① 定义一个接口(GetData),在源文件中将扩展名更改为.aidl,刷新一下 ,这时候会在gen文件夹下
*    自动生成一个对应的类,该类的一个内部类Stub继承了Binder并且实现了我们定义的接口
*  ② 在服务里自定义类继承那个内部类
*  ③ 在配置文件中注册服务,并在过滤器中设置action属性,以便于客户端通过隐式意图绑定
*/

import java.io.ObjectInputStream.GetField;

import myaidl.GetData;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class MyService extends Service {

@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
/**
* Stub既继承了Binder又实现了GetData接口
* @author Administrator
*
*/

class MyBinder extends GetData.Stub{

@Override
public String getString() throws RemoteException {
return "远程数据";
}

}

}


package com.example.connectservice;

import myaidl.GetData;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
/**
* 客户端(要先启动服务端) aidl所在的包名要和服务端aidl所在的包名相同
* 】首先将服务端的aidl文件copy到客户端(这时包名会不同,更改一下包名),同样在gen会自动生成一个对应的类
* 】绑定服务
* ① 通过隐式意图
* ② 在onServiceConnected中通过GetData.Stub.asInterface(service)
*   获取接口对象,这里是GetData.
* ③ 通过接口对象就可以调用远程服务的方法
* @author Administrator
*
*/
public class MainActivity extends Activity {
private GetData getData;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onclick(View v) {
switch (v.getId()) {
case R.id.btn_bind:// 绑定远程服务
Intent intent= new Intent();
intent.setAction("com.kk.service");
boolean b=bindService(intent, new MyCon(), Context.BIND_AUTO_CREATE);
Toast.makeText(this, b+"", 0).show();
break;
case R.id.btn_getData:// 获取远程服务数据
try {
String s=getData.getString();
Toast.makeText(MainActivity.this,s,0).show();
} catch (RemoteException e) {
e.printStackTrace();
}
break;

}
}
class MyCon implements ServiceConnection{

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
getData=GetData.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: