1、RPC Service:
(1)创建一个AIDL文件来向客户端定义接口
AIDL 文件使用 java语法,它的扩展名是点 .aidl 使用的包名称与Android项目所使用的包相同
package cn.gpb.service;
interface IPerson{
void setAge(int age);
void setName(String name);
String display();
}
(2)将AIDL 文件添加到项目的任意包下。Android Eclipse 插件将调用AIDL编译器来从 AIDL 文件生成 Java接口。这一步是eclipse插件ADT自动生成代码(在包gen下面)。
(3)实现一个服务并从 onBind()方法返回所生成的接口。
/**
* 使用service将接口暴露给客户端
*/
public class MyRemoteService extends Service {
//声明IPerson接口
private Stub iperson = new IPersonImpl();
@Override
public IBinder onBind(Intent intent) {
return iperson;
}
}
(4)写实现类IPersonImpl extends IPerson.Stub 来实现接口
/**
* IPerson 的实现类
*/
public class IPersonImpl extends IPerson.Stub{
private int age;
private String name;
public String display() throws RemoteException {
return "name:"+name+" age: "+age;
}

public void setAge(int age) throws RemoteException {
this.age = age;
}

public void setName(String name) throws RemoteException {
this.name = name;
}
}
(4)将服务配置添加到 AndroidManifest.xml文件中 。
<!-- RPC Service-->
<service android:name=".service.MyRemoteService" >
<intent-filter >
<action android:name="cn.gpb.service.MyRemote_service" />
</intent-filter>
</service>

(5)客户端进行连接:
public class ServiceActivity extends Activity {
private Button rpcButton;
private IPerson iperson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.service);
// 实例化按钮组件
rpcButton = (Button) findViewById(R.id.rpcButton);//rpc监听
rpcButton.setOnClickListener(rpc_listener);

}
private OnClickListener rpc_listener = new OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setAction("cn.gpb.service.MyRemote_service");
// 绑定服务
bindService(intent, rpcConn, Service.BIND_AUTO_CREATE);
}
};

//RPC 实例化ServiceConnection
private ServiceConnection rpcConn = new ServiceConnection() {
synchronized public void onServiceConnected(ComponentName name, IBinder service) {
//获取IPerson接口
iperson = IPerson.Stub.asInterface(service);
if(iperson!=null){
try {
iperson.setName("gongpeibao");
iperson.setAge(25);
String msg = iperson.display();
//显示方法调用返回值
Toast.makeText(ServiceActivity.this, msg, Toast.LENGTH_LONG).show();
} catch (RemoteException e) {
e.printStackTrace();
}

}
}
}

更多相关文章

  1. Android——4.2 - 3G移植之路之usb-modeswitch (二)
  2. Android(安卓)L Settings实现
  3. android 没有root下实现软件自动更新的一些思路和方法
  4. Android(安卓)studio 3.0.1 莫名其妙 R报错啦!(check logs for det
  5. Android(安卓)开发建立经验分享...
  6. ProGuard惯用法
  7. android 在分享时判断是否安装QQ,微信客户端
  8. Android(安卓)自定义类库打包jar! 谁说不可以打包res 文件?
  9. Android关闭SdcardFS

随机推荐

  1. android studio 的自动更新问题
  2. Android布局之LinearLayout
  3. Android之七 闪屏的实现
  4. android的init.rc文件的语法
  5. Android(安卓)Settings 设置中 Preferenc
  6. Android(安卓)Activity 属性介绍
  7. Android(安卓)studio 3.1.3 无法获取pom
  8. Arcgis android - Installation error: I
  9. Android添加快捷方式(Shortcut)到手机桌
  10. Android开发实现拖动效果