Android中AIDL异常

在调试AIDL服务的时候,一开始遇到了下面这个问题:

 java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.example.renkai.aidl_test.IMyService }
看过很多大神的回答,说是Android 5.0之后AIDL就不支持隐式声明了,总结了网上的方法,大致有两种,一种是通过Intent的setAction和setPackage方法来声明Service服务;另一种是在实例化Intent的时候就传入需要的服务类。这里主要讲第一种方法,客户端代码如下:

Intent intent = new Intent();
intent.setAction("com.example.renkai.aidl_test.IMyService");
intent.setPackage("com.example.renkai.aidl_test");
startService(intent);
bindService(intent,serviceConnection,
          Context.BIND_AUTO_CREATE);
通过setAction方法将服务端传入,注意这里的参数都是你自己在Service中定义的Action和Service的包名,如下:
<service android:name=".MyService" >
    <intent-filter>
         <action android:name="com.example.renkai.aidl_test.IMyService"/>
    </intent-filter>
</service>
这样就可以解决上述的异常了(原以为就这样结束了,天真的我眼泪掉下来 大哭),在调用服务端的方法时,却又出现了错误:

java.lang.SecurityException: Binder invocation to an incorrect interface
解决方法就是,保证两端的AIDL接口一致,必须是完全一致,即包名和文件名均一致,所以我就直接将服务端的AIDL下的文件夹copy到了客户端的AIDL文件夹下,重建到一半,出现了一大堆问题啊,最后在客户端直接创建一个和服务端文件名完全一样的文件夹,最终解决问题。

1.服务端


2.客户端



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值