Android(安卓)解决AIDL bindService异常
16lz
2021-12-04
Android 解决AIDL bindService异常
- 问题1 bindService抛出异常java.lang.SecurityException: Not allowed to bind to service
- 问题2 bindService抛出异常android bindService process is forbid to start by firewall
- 问题3 bindService返回false
一直做嵌入式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终于成功了!
更多相关文章
- Android中Service类onStartCommand的返回值问题
- [已解决]mac android studio安装报错java.lang.RuntimeException
- Android(安卓)读取TXT 文件中文乱码 解决方案
- 如何解决Errors occurred during the build.
- Android(安卓)PopupWindow工具类 (已解决7.1以上showAsDropDown
- Android(安卓)SDK Manager无法更新解决方法
- android在service中使用AsyncHttpClient加载网络资源
- Android(安卓)SDK更新 Connection to http://dl-ssl.google.com
- android 开发中遇到错误及解决办法总结(在别处看到的)