关于AIDL客户端与服务端交互的包名问题-package

今天在做一个有关AIDL的例子的时候,遇到一个小问题,死活两个进程就是无法通信。按着书上的例子做的(此处代码出自疯狂Android讲义第2版),还是出错,最后在网上查了下才知道是包名的问题。也就是说自己定义的那个AIDL接口所在的包的包名必须保持客户端和服务器端一致。否则会报错,程序强制退出。错误信息如下(事物绑定失败):

在调试模式下会看到如下异常(目标调用异常)抛出:

之所以这样是因为我的包名不一致,如下:

                             

两者所在的包不一样,这是因为自己当时是直接复制的那个ICat.aidl文件,内容为:

1 package com.qc.aidlservice;
2 interface ICat
3 {
4     String getColor();
5     double getWeight();
6 }

因为其中涉及到导包,因为直接复制到服务端会报错,所以在服务端的文件中我把需要导入的包名改成了如下的包:

1 package com.example.myaidlclientdemo;
2 interface ICat
3 {
4     String getColor();
5     double getWeight();
6 }

但是这样就会出现上面所说的错误,其实这样多此一举反而造成了错误。最简单的做法就是在编写完服务器端代码后直接将AIDL文件所在的包原封不动的复制到我们的客户端。系统会自动为我们生成.java文件,简单方便。如下:

                                           

最后需要注意的就是配置service的时候,千万不能把service的属性配置成android:exported="false",此例中为:

1 <service android:name=".AidlService"
2             android:exported="false">
3             <intent-filter >
4                 <action android:name="com.example.myaidldemo.action.AIDL_SERVICE"/>
5             </intent-filter>
6         </service>

这样配置外部应用当然无法访问了啊(犯该错误的原因是在解决上篇博文里的警告问题是忘记改过来了,所以程序就一直强推,所以一定要细心细心再细心!!!)。

应该配置为:

1 <service android:name=".AidlService"
2             android:process=":remote">
3             <intent-filter >
4                 <action android:name="com.example.myaidldemo.action.AIDL_SERVICE"/>
5             </intent-filter>
6         </service>
时间: 2024-12-18 22:31:11

关于AIDL客户端与服务端交互的包名问题-package的相关文章

Android客户端与服务端交互之登陆示例

今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台使用简单的servlet,支持GET或POST.这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功. servlet使用之前需要配置,主义servlet的servlet-name要和servlet-mapping的servlet-name一致,否则找不到路径 我是在myEclipse上创建的一个we

python3中实现客户端与服务端交互发送文件

在python3中实现客户端与服务端程序交互,从客户端发送文件到服务端 客户端代码:client.py #!/usr/bin/env python #_*_ encoding=utf-8 _*_ import socket,sys,os ip_port = ('127.0.0.1',9999) sk = socket.socket() sk.connect(ip_port) container = {'key':'','data':''} while True:     input_data =

基于socket简易版客户端,服务端交互

简易版客户端服务端交互 常识 AF_UNIX 是基于文件类型的套接字家族 AF_INET是 基础网络类型的套接字家族 socket 模块属性很多,可以直接使用from module import *语句 ,这样socket所有的数据都被带劲命名空间里了. 减少代码量(少用) 服务端 #1导入 import socket # 2.获取套接字 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #3绑定 s.bind(('127.0.0.1',807

android客户端与服务端交互的三种方式

android客户端向服务器通信一般有以下选择: 1.传统的java.net.HttpURLConnection类 2.apache的httpClient框架(已纳入android.jar中,可直接使用) 3.github上的开源框架async-http(基于httpClient) ---------------------------------------------------------------------------------- 下面分别记录这三种方式的使用, 传统方式: /**

android 38 Abdroid客户端和服务端交互

服务端: package com.sxt.day05; import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest

python socket编程之客户端和服务端简单交互

服务端 #_*_ coding:utf-8 _*_ #导入socket模块 import socket # 创建socket对象 sk = socket.socket() #绑定侦听的IP和端口号 ip_port = ('192.168.9.213',9999) sk.bind(ip_port) #最大连接数 sk.listen(5) #接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口 #通过while循环,让服务端一直接受客户端请求 print "正在等待客户

Android WebView与服务端交互Demo

使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互.我这里客户端使用的工具是Eclipse,服务端使用MyEclipse. 实现效果图: 客户端: 点击登录按钮后,页面跳转,而在服务端Console中看到如下(只看最后一行即可): 可以看到服务端收到了客户端发过来的用户名:yao. 源代码: 客户端: activity_main: <RelativeLayout xmlns:android

二、网络编程-socket之TCP协议开发客户端和服务端通信

知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人,信丢了你也不知道,tcp传输需要先和服务端建立连接,当客户端与服务器连接时,服务器会给出应答,我俩连上了,而且数据传过来还会进行一个数据包数量验证,不一致会重新发送,还有其他种种验证,总之保证了数据传输安全可靠   这一章主要介绍使用套接字,编写一个tcp协议客户端和服务端.同样要用到上一章节提到小

使用多线程实现多个客户端与服务端通信1

Server.java package socket; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket; /** * 聊天室服务端 * @author 小