Android 解决AIDL bindService异常

  • Post author:
  • Post category:其他


一直做嵌入式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终于成功了!



版权声明:本文为s448573057原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。