2 u014248939 u014248939 于 2016.04.18 09:28 提问

android AIDL使用的问题

AIDL的使用步骤是:
创建两个工程,一个为client,一个为server
server端在src目录下专门创建一个包用于放置创建的myInterface.aidl接口文件,定义用于通信的抽象方法,然后编译,在gen目录下生成myInterface.java文件,该文件会自动生成内部接口myInterface.Stub;再创建一个Service类,在类中创建myInterface.Stub对象,实现在接口中定义的用于通信的抽象方法;
再重写onBind方法,把Stub对象返回出去(Stub类是IBinder的子类,可以用于client端和server端的通信)
然后在AndroidManifest文件里配置Service类

然后把在server端定义的aidl接口文件复制到client端项目中(连包带文件一起复制,保持client端和server端aidl接口所在包路径一样),在client端的Activity中定义ServiceConnection类对象和server端接口myInterface对象,重写ServiceConnection对象的onServiceConnect,在该方法中获取来自server端的myInterface对象,
现在就可以调用myInterface中的方法(也就是client端调用server端的方法,也就完成了进程间通信)

上面的ServiceConnection要能获取到IBinder对象,还需要client用Intent完成与server端的Service类的绑定
我就卡在这一步了
不管是对server端Service指定Action来让client端启动,还是指定其它东西,就是无法再client端项目里启动server端项目里的Service
有谁知道怎么解决吗?
简而言之,就是如何在当前工程中调用远程Service

2个回答

CSDNXIAOC
CSDNXIAOC   2016.04.18 09:32

             

  上图为所建工程结构 因为android AIDL建立时需要包名相同 ,所以建议copy,注意运行时先运行一次service,不要犯低级错误哈 
  1:服务端和客户端都有的相同的aidl文件,自动生成文件就不贴了
package com.pengxi......
答案就在这里:android AIDL的使用
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

u014248939
u014248939 我不知道是不是配置有问题,在客户端启动服务器端Service时的时候总是不成功
2 年多之前 回复
javalaiba
javalaiba   2016.04.18 10:05

你的mainifest.xml文件怎么写的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android 5.0及更高系统使用AIDL的问题
如果你是刚刚使用AIDL的新手, 一定发现在网上找到的其他关于AIDL的资料都是基于较早平台下的(Android 5.0以前). 其代码在更高平台会出现一个比较麻烦的问题, 我花费了好长时间才弄清楚解决方案, 在此分享给大家希望能帮助新手少走弯路.下面我以http://blog.csdn.net/cjjky/article/details/7562652中的代码举例, 如果你恰好也在Android
AIDL的真相-Android中的代理(Proxy)模式
e安教育 2017-02-28 17:04 简介 我在公司负责的模块,是以本地代理模式的形式提供给其他人使用的, so, 总结了一下关于代理模式的概念. 代理两个字我们平时接触的还是很多的, 比如我们经常使用http代理, 我们的人事代理, 我们的法务代理, 其实都是我们不想做一件事情, 让另一个对象帮我来做这个事情. 那么我们的代理模式定义就出来了: 为其他对象提供一种代理,
AIDL的简单使用,涵盖5.0之后系统及魅族手机调用问题的解决
最近在整理笔记,因为我很多东西都是放在印象笔记里面,写的也不是特别规范,有时候时间长了,自己回头看都有点懵圈,现在一点点的挪到博客里来,尽量写的规范一点,如果能帮到有需要的朋友,也是件好事。 AIDL,就是安卓跨进程通信的方式,其内部细节及Binder的实现暂时不表,只说怎样使用及一些注意点,还有我自己写demo的时候碰到的问题,比如5.0之后隐式调用Service出错啦,在魅族手机上无法绑定,
Android Studio中使用AIDL进行进程间通信
什么是AIDL aidl是 Android Interface definition language的缩写,也就是安卓接口定义语言 为什么要有AIDL AIDL允许你定义客户端与服务端达成一致的程序接口使用进程间通信相互交流。 在Android上面,一个进程不能正常的访问另一个进程的内存。 所以说,他们需要分解他们的对象为操作系统可以理解的基本单位,然后为你把这些对象按次序跨越进程边界 ,书
aidl使用和注意事项
aidl 如何使用看下图: 英语不好:大概就是1.创建aidl文件 2. 声明ibinder的接口(由ide生成),在定义一个服务同onbind方法把接口,暴露给客户端. 3.实现一个serviceconnnerction 4.bindservice()服务绑定, 5.在onserviceconnectes()获取ibindder的实例. 6.然后就是调用你在aidl声
Android Aidl遇到的一些问题
Android Aidl遇到的一些问题(1)5.0以后官方要求显示启动service**如果隐式启动将报错(如果隐式启动除非intent.setPackage(“要启动的service的应用包名”)也就是显示启动)(2)android studio aidl客户端编译时 Error:(9, 41) 错误: 找不到符号 符号:原因是其他类名(java)文件和aidl的aidl文件混合放在了一个目录
android studio 下aidl的使用遇到的坑
这几天在看学习android下IPC的机制,在深入学习aidl时候碰到个蛋疼的问题,在此记录下来。 对于最新版本的android studio 右键new AIDL-AIDL File后,会自动在src/main/目录下创建路径 aidl/创建的aidl文件即放在这个路径下,接下来通过build project IDE会自动生成与定义接口相关的文件,文件创建的路径为:app/build/ge
Android 中aidl调用执行线程和同步异步问题
aidl调用中执行所在线程
Android进程间通讯AIDL使用及问题详解(雷惊风)
之前对AIDL用的不是很多,今天抽时间对其做一下详细的了解,下面本人主要从以下几个方面对AIDL做一下总结: 1.什么是AIDL? 2.为什么Android中要有AIDL? 3.什么时候使用AIDL? 4.具体怎么实现AIDL? 下面我们就进入今天的分析,分析代码Demo会在最后附上下载地址。   一.那么首先什么是AIDL呢? AIDL全称为Android Interface d
Android studio 上使用aidl总结
AIDL   Android Interface definition language 接口定义语言。不同的进程是不能通信的,通过aidl的方式来实现内存的共享,实现进程间的通信。   只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL,其他情况下你都可以选择其他方法,如使用Messager,也能跨进程通讯。可见AIDL是处理多线程、多客户端并发访问