服务之远程服务
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) { } } }
相关文章推荐
- Java 内存分配
- jquery append appendTo before after insertAfter insertBefore prepend prependTo用法区别
- 编写轻量ajax组件01-与webform平台上的各种实现方式比较
- hdu 5531 Rebuild(三分)
- DS-5教程-ARM DS-5 添加新芯片至DS-5调试设备列表
- Partial Least Squares Regression 偏最小二乘法回归
- hdu 1166 敌兵布阵(树状数组)
- 详解jQuery向动态生成的内容添加事件响应jQuery live()方法
- android编辑框得到焦点时让键盘弹出
- iOS 添加手势
- Android手机实时视频监控
- 不再一直翻文件夹了,使用cmd命令吧
- C语言第四章
- 尽量少炒新开盘股,尼玛铜陵有色亏了老子5000块
- [leetcode] Game of Life
- 服务之非绑定服务
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之最佳实践SharedPreferences(十七)
- webView未加载完,退出方法
- Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)
- js调用.bat文件或dos命令的方式