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.如果要 ...
随机推荐
- 测试环境下将centos6.8升级到centos7的操作记录(转)
在测试环境下安装openstack,由于在centos6下安装openstack,针对源的问题有很多,安装起来很不顺利! 但是在centos7下安装却很顺利,所以考虑将服务器由centos6升级到ce ...
- RedHat6.6安装Oracle11gR2
RedHat6.6安装Oracle11gR2 一.Centos6.6的安装配置 1- 选择安装模式 2- 选择“skip”,跳过检查. 3- 选择“下一步” 4- ...
- 第九篇 Replication:复制监视器
本篇文章是SQL Server Replication系列的第九篇,详细内容请参考原文. 复制监视器允许你查看复制配置组件的健康状况.这一篇假设你遵循前八篇,并且你已经有一个合并发布和事务发布.启动复 ...
- myeclipse WIN7下设置字体列表中无Courier New
到"C:\Windows\Fonts"下找到对应的字体,单击,选择上面的显示 然后就可以在eclicpse字体设置里面看到Courier New项了: Eclipse字体设置方法: ...
- nginx地址重写
1. 域名重定向 server_name wx.he.com weixin.ha.com; if ($http_host !~* "wx\.he\.com"){ rewrite ^ ...
- Java Socket常见异常处理 和 网络编程需要注意的问题
在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发 ...
- Java 分布式应用
- Lintcode: Segment Tree Query
For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding ...
- UVa10025-The ? 1 ? 2 ? ... ? n = k problem
分析:因为数字之间只有加减变换,所以-k和k是一样的,都可以当成整数来考虑,只要找到最小的n满足sum=n*(n+1)/2>=k:且sum和k同奇同偶即可,做法是用二分查找,然后在就近查找 因为 ...
- HDU 4900 NO ACM NO LIFE(概率+枚举+搜索)(2014 Multi-University Training Contest 4)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4900 Problem Description There is an old country and ...