android 中activity调用远程service中的方法之 aidl的使用
服务端:只有服务,没有界面
1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符。系统会自动在gen目录下生成对应的java文件 (对应本地调用中的接口文件)
aaarticlea/png;base64,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" alt="" />
2.编写service,其中内部类的自定义bind 只需要继承Stub即可。(本地调用则需要继承Bind 并实现 interface接口)
public class PayService extends Service { @Override
public IBinder onBind(Intent intent) {
return new Pay();
}
public class Pay extends Stub {
@Override
public void pay(String userName, String password, String sendToAccount, float money) throws RemoteException {
toPay(userName, password, sendToAccount, money);
}
}
public void toPay(String userName, String password, String sendToAccount, float money){
System.out.println(userName + "@" + password + " to " + sendToAccount + "$" + money);
} }
3.清单文件中注册,添加intent-filter 项,以便于被调用
<service android:name="cn.pay.service.PayService" >
<intent-filter>
<action android:name="cn.pay.service.PayService" />
</intent-filter>
</service>
========================================================分隔线========================================================
客户端:
在activity中自定义ServiceConnection的内部类。转化接口实例的方法用 接口类名.Stub.asInterface(service) (本地调用是直接将service强转为接口实例)
package com.example.aidlpayclient; import cn.pay.aidl.IPayService;
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; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //绑定服务
conn=new MyServiceConnection();
bindService(new Intent("cn.pay.service.PayService"), conn, Context.BIND_AUTO_CREATE);
} private MyServiceConnection conn = null;
private IPayService iPayService; private class MyServiceConnection implements ServiceConnection { @Override
public void onServiceConnected(ComponentName name, IBinder service) {
iPayService = IPayService.Stub.asInterface(service);
System.out.println("绑定成功");
} @Override
public void onServiceDisconnected(ComponentName name) {
iPayService = null;
} } public void pay(View v) {
System.out.println("begin pay");
try {
//调用方法.
iPayService.pay("a", "b", "c", 100);
} catch (RemoteException e) {
e.printStackTrace();
}
System.out.println("end pay");
} }
android 中activity调用远程service中的方法之 aidl的使用的更多相关文章
- android 中activity调用本地service中的方法。
1.自定义一个接口,暴露服务中的方法 public interface IService { /**服务中对外暴露的方法 */ void methodInService();} 2.自定一 ...
- Android Activity与远程Service的通信学习总结
当一个Service在androidManifest中被声明为 process=":remote", 或者是还有一个应用程序中的Service时,即为远程Service, 远程的意 ...
- html中引入调用另一个html的方法
html中引入调用另一个html的方法,尝试了好几种,都列出来: 其中第一种是最好的,其他的方法,可以尝试看看,是不是适合你当前项目 一.div+$("#page1").load( ...
- 【安卓面试题】在一个Activity启动另一个Activity和在Service中启动一个Activity有什么区别
在Activity中可以直接使用Intent启动另一个Activity 显式Intent intent = new Intent(context, activity.class) 隐式 Intent ...
- Android悬浮框,在Service中打开悬浮窗;在Service中打开Dialog;
文章介绍了如何在Service中显示悬浮框,在Service中弹出Dialog,在Service中做耗时的轮询操作: 背景需求: 公司的项目现在的逻辑是这样的:发送一个指令,然后3秒一次轮询去查询这个 ...
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文 ...
- 项目中Ajax调用ashx页面中的Function的实战
前台页面: 使用几个display=none的空间存储DropdownList中的值,点击Search Button后刷新页面再次给DropdownList赋值使用 <%@ Page Langu ...
- C代码中如何调用C++ C++中如何调用C
注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. 集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译 ...
- Magento中,调用静态块的几种方法
在后台创建一个order_form静态块Block Title :Order FormIdentifier :order_formStatus :EnabledContent :自定义内容 1.如果要 ...
随机推荐
- mysql的粗略学习
输入root进入mysql 试着输入了两个语法都没动静,输入\h终于有反应了 语法错误 show databases; //显示数据库 为什么没有人告诉我还有个英文下的分隔符号... 查的资料不是没有 ...
- [ROS]1 小乌龟
对于一个新新新手,Linux,ROS都要学习.安装ROS真的很讨厌了,于是采用易科机器人实验室的ubuntu12.04-amd64-ros-exbot-h2-140520版本. 测试一下小乌龟节点.主 ...
- 如何让CRectTracker的m_rect不超出一定的范围,比如screen或者某个document的范围
最近在尝试做一个QQ截图那样的工具,其中一个功能就是要做一个选择框,自然用到了CRectTracker 但是有一个很关键的东西就是,拖拽CRectTracker的时候,不能让CRectTracker“ ...
- block数据类型
// // main.m // 04-block数据类型 // // Created by apple on 14-3-18. // Copyright (c) 2014年 apple. Al ...
- TIJ——Chapter Two:Everything Is an Object
If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...
- 在navgationController中添加UISegmentedControl
NSArray *segmentedArray = [NSArray arrayWithObjects:@"患者基本信息",@"患者信息",nil]; UISe ...
- JAVA-面向对象-继承
继承 (关键字extends ) (关键字 final 表示终态,在父类前加 final 则父类无法被继承,加在方法前则方法不能被重写或者覆盖,加在变量前则变量只能被赋值一次) 1.权限修饰符 ...
- JAVA开发Web Service几种框架介绍
郑重声明:此文为转载来的,出处已不知了,侵告删. 在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS( ...
- SQL 基本的函数
select * from emp;
- [转]30分钟学会反向Ajax
原文链接:http://www.cnblogs.com/learnhow/p/5708364.html 场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机 ...