快捷搜索: 王者荣耀 脱发

针对SecurityException的处理方式

 

情况一:

在使用AIDL远程服务时,经常会遇到ERROR/AndroidRuntime(716): java.lang.SecurityException: Binder invocation to an incorrect interface这个错误,解决方法:在使用上请注意,服务端与客户端都要有相同的接口(使用到的),这里的“相同”是指完全相同,包括包名,也就是说要在不同工程下建立相同的包名。

一个是activity 的 ,一个是service 的。

在进行两个project通信时,应该有以下几点注意: 1.在activity project中引入service project中aidl文件。注意引入后的aidl文件包名应该和service中aidl文件包名保持一致。 2.service project中manifest文件中,service 注册时要声明 android:process=":remote" action应该是aidl中接口的包名.接口名。

3.activity bindService中一个serviceconnection对象对应的是一个service,否则会报java.lang.SecurityException: Binder invocation to an incorrect interface异常。

例如你原先在service中建立了一个 com.abc.service.test.aidl

那么你在要通信的 Activity 中要建立一个 com.abc.service.test.adil 即两者要对应。不要把test.adil 直接放在你activity的包中,重新见一个包,包名是com.abc.service 然后把test.aidl 放入去就OK。

情况二:

当我们在别的应用内调用你某个程序的Activity有时候会发生这个错误:

java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.siveco.bluebee.phone.supervisor/com.siveco.bluebee.core.activity.GetServerAddressActivity } from ProcessRecord{412d7170 1644:com.siveco.bluebee.project.productionfeedback/10056} (pid=1644, uid=10056) not exported from uid 10047

解决方式:在Activity节点上添加属性:android:exported="true"

情况三:

java.lang.SecurityException: ConnectivityService: Neither user 10037 nor current process has android.permission.ACCESS_NETWORK_STATE.

原因:SecurityException,显然是权限不够。

解决方案:在AndroidManifest.xml中,加入如下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

经验分享 程序员 微信小程序 职场和发展