关于AIDL客户端与服务端交互的包名问题-package
2016-05-10 17:46
218 查看
今天在做一个有关AIDL的例子的时候,遇到一个小问题,死活两个进程就是无法通信。按着书上的例子做的(此处代码出自疯狂Android讲义第2版),还是出错,最后在网上查了下才知道是包名的问题。也就是说自己定义的那个AIDL接口所在的包的包名必须保持客户端和服务器端一致。否则会报错,程序强制退出。错误信息如下(事物绑定失败):
在调试模式下会看到如下异常(目标调用异常)抛出:
之所以这样是因为我的包名不一致,如下:
两者所在的包不一样,这是因为自己当时是直接复制的那个ICat.aidl文件,内容为:
package com.qc.aidlservice; interface ICat { String getColor(); double getWeight(); }
因为其中涉及到导包,因为直接复制到服务端会报错,所以在服务端的文件中我把需要导入的包名改成了如下的包:
package com.example.myaidlclientdemo; interface ICat { String getColor(); double getWeight(); }
但是这样就会出现上面所说的错误,其实这样多此一举反而造成了错误。最简单的做法就是在编写完服务器端代码后直接将AIDL文件所在的包原封不动的复制到我们的客户端。系统会自动为我们生成.java文件,简单方便。如下:
最后需要注意的就是配置service的时候,千万不能把service的属性配置成android:exported="false",此例中为:
<service android:name=".AidlService" android:exported="false"> <intent-filter > <action android:name="com.example.myaidldemo.action.AIDL_SERVICE"/> </intent-filter> </service>
这样配置外部应用当然无法访问了啊(犯该错误的原因是在解决上篇博文里的警告问题是忘记改过来了,所以程序就一直强推,所以一定要细心细心再细心!!!)。
应该配置为:
<service android:name=".AidlService" android:process=":remote"> <intent-filter > <action android:name="com.example.myaidldemo.action.AIDL_SERVICE"/> </intent-filter> </service>
相关文章推荐
- Kafka设计解析(三)- Kafka High Availability (下)
- Kafka设计解析(二)- Kafka High Availability (上)
- Rails中如何避免N+1问题
- Ex2010-03 figure out the number of mailboxes per database
- leetcode 336. Palindrome Pairs
- 传统图像、现代图像、人工智能时代图像算法工程师的研究内容
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- 【CDMI-PROJECT】DAILY SUMMURY
- rsync故障排除解答
- 报错Resource temporarily unavailable
- 各种距离(机器学习,人工智能干货)
- AIDL实例分析和讲解
- 8、服务的启动、AIDL
- 关于OnEraseBkGnd()和OnPaint()
- POJ 2010 Moo University - Financial Aid 优先队列
- 以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试
- STL学习_萃取技术__type_traits
- gradle project refresh failed: protocol family unavailable
- raid0又称条带化
- [na]mail收发过程