Android 解决AIDL bindService异常


一直做嵌入式linux开发,不料前些日子产品要移植android平台,只好一边看各路android大神的博客,一边移植项目。语言还好说,基本都差不多;平台差异真的还是挺大的。

以往在linux平台中,IPC(进程间通信)大多会通过socket来实现。
切换到Android以后,发现有更简单高效的AIDL可以使用,于是想先写个demo尝试。

服务端我只定义了一个Service,客户端做了一个简单的Activity,上面有几个测试用的Button。于是就开始了坎坷的调试之路。

问题1 bindService抛出异常java.lang.SecurityException: Not allowed to bind to service

⇒ Manifest中service的exported属性设置为true

问题2 bindService抛出异常android bindService process is forbid to start by firewall

⇒ 服务端只有一个Service,后来随便加了一个Activity这个异常就解决掉了。难道android应用里不可以只有Service吗?我对此表示怀疑,应该会有更好方法去解决,如果有小伙伴知道,请指点一二。

问题3 bindService返回false

解决:这个问题困扰了我好久,网上找来的解决方案不少,但是没有对症的。直到后来看到了下面这篇文章
https://blog.csdn.net/jinrall/article/details/53465403

我的服务端app是com.test.aidltestserver,服务Service所在的包是com.test.aidltestserver.aidl。我在客户端中bindService时,创建Intent的代码如下

Intent intent = new Intent("com.test.aidltestserve.aidl.StartService");
intent.setClassName("com.test.aidltestserve.aidl", "com.test.aidltestserve.aidl.ConnectionService");
boolean ret = getApplicationContext().bindService(intent, conn, BIND_AUTO_CREATE);

问题就出在setClassName方法的第一个参数,这个参数的形参命是packageName,于是我就想当然的传入了包名"com.test.aidltestserve.aidl",但是事实上这个参数要传入的是ApplicationID,也就是**“com.test.aidltestserve”**。修改了参数以后,bindService终于成功了!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值