一、服务端

1、清单文件,因为要远程调用,所以要配个action

        <service android:name="com.example.alipayservice.AliPayService">
<intent-filter>
<action android:name="com.example.alipay"></action>
</intent-filter>
</service>

2、实现服务类

 package com.example.alipayservice;

 import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; public class AliPayService extends Service { @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("远程服务被绑定onBind");
return new Mybinder();
} private void methodInService(){
System.out.println("我是远程支付宝的服务,用来支付的");
} private class Mybinder extends IService.Stub{ @Override
public void callMethodInService() {
// TODO Auto-generated method stub
methodInService();
} }
@Override
public void onCreate() {
// TODO Auto-generated method stub
System.out.println("远程服务被创建onCreate");
super.onCreate();
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("远程服务被销毁onDestroy");
super.onDestroy();
} @Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("远程服务被解除onUnbind");
return super.onUnbind(intent);
} }

3、aidl文件(安卓接口定义语言),注意:它是没有public修饰的

 package com.example.alipayservice;
interface IService {
void callMethodInService();
}

二、客户端调用

1、引入aidl文件,这个文件要和服务端的一样,并且连包名也要一样,否则会报错

 package com.example.alipayservice;

 interface IService {
void callMethodInService();
}

2、客户端调用代码

 package com.example.games;

 import com.example.alipayservice.IService;

 import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { private Intent intent;
private IService iService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent();
intent.setAction("com.example.alipay");
} public void bind(View view){
bindService(intent, new MyConn(), BIND_AUTO_CREATE);
} private 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 } }
public void call(View view){
try {
iService.callMethodInService();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

注意:

1、获取接口对象的方法是:IService.Stub.asInterface(service),而不是本地使用时的强制类型转换

2、不解除绑定,直接退出activity,程序的logcat还是会显示错误信息的,应当遵循本地绑定服务时的注意事项

使用aidl绑定远程服务的更多相关文章

  1. [android] 采用aidl绑定远程服务

    aidl:android interface definition language 安卓接口定义语言 在两个不同的应用程序里面使用同一个接口 使用场景:调用支付宝服务进行支付 先写远程服务端Seri ...

  2. 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景

    ============================================================================ 服务的生命周期: 一.采用start的方式开始 ...

  3. Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务

    1. 概述 bindService() 绑定服务  可以得到服务的代理人对象,间接调用服务里面的方法. 绑定服务: 间接调用服务里面的方法.           如果调用者activity被销毁了, ...

  4. Android学习笔记_23_服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数

    一.了解AIDL语言: 在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的.因此要传递对象, 需要把对象解析 ...

  5. 使用AIDL调用远程服务设置系统时间

    在实际工作中,经常遇到客户需要用代码设置系统时间的需求,但是Android非系统应用是无法设置系统时间的.于是,我设计了一个使用系统签名的时间设置服务,客户通过bind调用服务里的方法就能达到设置时间 ...

  6. Android下的IPC通信方式

    一.Bundle Android的Activity.Service.Receiver都支持在Intent传递Bundle数据,Bundle实现了Parcelable接口, 所以能很方便的在不同进程之间 ...

  7. Android中利用AIDL机制调用远程服务

    服务端: //CalculateInterface.aidl package com.itheima.aidl.calculate; interface CalculateInterface { do ...

  8. Android-bindService远程服务(Aidl)-传递对象

    之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...

  9. Android-bindService远程服务(Aidl)-初步

    之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...

随机推荐

  1. C函数调用与栈

    这篇blog试图说明这么一个问题,当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的.这些细节跟操作系统平台及编译器的实现有关,下面的描述是针对运行在Linux的gc ...

  2. [每日一题] 11gOCP 1z0-052 :2013-09-14 repeated parsing activity.................................A70

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/11699299 正确答案:D SQL语句的执行过程: 1.客户端输入sql语句update ...

  3. MFC基础类源码CPP实现文件

    WinMain.CPP---->AfxWinMain()  //近似可认为是WinMain()函数的入口 VIEWCORE.CPP---->CView DOCCORE.CPP----> ...

  4. Jenkins Maven打包出错异常的解决方法

    Jenkins是一个很好用的打包部署工具,实现一键式部署项目,在项目处于测试阶段或者对于运维人员来讲是非常方便的一个工具. 但是最近使用Jenkins部署项目时老是出错,主要是maven打包的问题,错 ...

  5. Android Studio入门到精通

    链接地址:http://blog.csdn.net/yanbober/article/details/45306483 目标:Android Studio新手–>下载安装配置–>零基础入门 ...

  6. USACO Milk2 区间合并

    这题WA了四次,后来发现不能用所谓的桶排来写 虽然空间上是可以的,但是存在这样一个问题 比如两组数据[15,20]和[21,30] 在20 和 21这两个时刻之间没有milking,但是用桶排的方法写 ...

  7. Android 修改底部导航栏navigationbar的颜色

    Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...

  8. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--跨表操作)

    上篇文章我们介绍了如何利用DataSet 和 DataAdaper对象来对单张表进行操作. 本文我们将介绍如何进行跨表操作. 我们通过具体例子方式进行演示,例子涉及到三张表. 1)student表(学 ...

  9. Linux驱动编写(块设备驱动代码)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 按照ldd的说法,linux的设备驱动包括了char,block,net三种设备.char设备 ...

  10. Failed to retrieve procctx from ht. constr

    给一个客户巡检时发生这样的少见的集群报错: [  OCRSRV][1220598112]th_select_handler: Failed to retrieve procctx from ht. c ...