Android 采用AIDL绑定远程服务
来源:互联网 发布:博途v14软件下载 编辑:程序博客网 时间:2024/05/16 06:25
如果服务Service和Activity在同一个应用里,我们可以按照上一篇文章记录里的那样去控制,但是如果不在一个应用中,那该如何控制呢?例如阿里客户端,不仅仅是在淘宝网上可以支付,在其他地方支付页面(游戏购买道具页面等),第三方工具都可以打开使用。
1、新建第一个工程:支付宝安全支付
XML布局文件和Activity中没有任何操作,新建一个接口Iservice.java
package com.example.study;public interface Iservice {public void callMethodInService();}找到源文件的存储位置,将Iservice.java文件的后缀名改成.aidl,再返回编辑页面,刷新就可以看到文件会报错,为什么呢?因为AIDL本身就是为了别的程序调用的,所以不需要加上public或者private等修饰,去掉之后如下:
package com.example.study;interface Iservice {void callMethodInService();}刷新之后可以看到,在gen目录的包下,已经生产了Iservice.java的文件,这个是系统自动生成的,不用管。
2、新建一个Service文件,如下:
public class PayService extends Service{@Overridepublic IBinder onBind(Intent intent) {// TODO 自动生成的方法存根System.out.println("远程支付服务:+onBind");return new myBinder();}@Overridepublic boolean onUnbind(Intent intent) {// TODO 自动生成的方法存根System.out.println("远程支付服务:+onUnbind");return super.onUnbind(intent);}@Overridepublic void onCreate() {// TODO 自动生成的方法存根System.out.println("远程支付服务:+onCreate");super.onCreate();}@Overridepublic void onDestroy() {// TODO 自动生成的方法存根System.out.println("远程支付服务:+onDestory");super.onDestroy();}private void methodInservice(){System.out.print("我是远程支付宝的服务,用来支付 ");}//private class myBinder extends Binder implements Iservice{////@Override//public void callMethodInService() {//// TODO 自动生成的方法存根//methodInservice();//}//这个时候就不需要继承Binder实现Servicel //}<strong><span style="font-size:12px;color:#ff0000;">private class myBinder extends Iservice.Stub{ //stub已经继承了Binder实现了Iservice@Overridepublic void callMethodInService(){// TODO 自动生成的方法存根methodInservice();}}</span></strong>}服务文件基本创建完成,下边创建调用文件
3、新建一工程:游戏支付
布局文件中添加两个按钮,bind和call,前者用来绑定服务,后者用来调用服务里的方法。
首先:建立一个包,包名和Iservice.aidl的完全一样,把Iservice.aidl文件拷贝进去,刷新后再gen目录下也会同样出现Iservice.java文件。
public class MainActivity extends Activity {private Intent intent ;private Iservice iservice;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);intent = new Intent();intent.setAction("com.study.pay");}public void bind(View view){bindService(intent, new myConn(), BIND_AUTO_CREATE);}public void call(View view){try {iservice.callMethodInService();} catch (RemoteException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}//创建一个Serviceconn类<span style="font-size:14px;"><strong><span style="color:#ff0000;">private class myConn implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName name,IBinder service) {//由于此方法是自动执行的,所以返回一个service,自定义一个service等于返回的这个service</span>iservice = Iservice.Stub.asInterface(service);<span style="color:#ff0000;">}@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO 自动生成的方法存根}}</span></strong></span>}这样就OK了,可以看到点击按钮之后,Service中会打印出相对应的log。
0 0
- Android 采用AIDL绑定远程服务
- 采用aidl绑定远程服务
- android-------采用AIDL调用远程服务
- android 的aidl绑定远程服务
- Android使用aidl来绑定远程服务
- AIDL绑定远程服务
- aidl绑定远程服务
- android,aidl,绑定远程服务,调用远程服务的方法
- 采用AIDL调用远程服务
- android绑定远程服务以及android接口定义语言(aidl)
- android开发之------绑定远程服务的流程aidl
- Android:Service(三)——Aidl绑定远程服务
- android AIDL绑定服务使用
- 绑定远程服务的流程aidl
- Android AIDL实现远程服务
- Android远程服务绑定
- android 绑定远程服务
- Android中的服务(service)--AIDL远程服务
- Why today is called present
- 基本排序(四):索引指针排序、链表排序、关键字排序
- 支付宝声波支付原理
- android各版本及版本号对应关系
- wampserver 2.5安装
- Android 采用AIDL绑定远程服务
- 七牛上传同名文件为什么没有报错解答
- Jquery:$Deffered() 异步队列(一)
- 30岁以上工程师——无法说出的悲哀与迷茫!(转)
- HDFS 使用Java api实现上传/下载/删除文件
- LeetCode:Generate Parentheses
- 04 shell条件测试和判断语句
- Server Tomcat v6.0 Server at localhost failed to start.
- JavaScript String 字符串对象