最新消息:20210917 已从crifan.com换到crifan.org

【已解决】rcsjta中RI检测core的Service的status时报错:API is not compatible

Service crifan 198浏览 0评论
折腾:
【无法解决】调试rcsjta的settings以触发setActivationMode设置激活模式以去找RCS服务启动逻辑
期间,此处安卓手机 安卓的9的 红米Note8Pro中
RI中点击Service status中,时不时的就会报错:
API is not compatible
Service activated 不是显示 false(希望是true)
还显示异常:
Service activated:Failed to read stack started status
不过呢,此处错误,时偶尔发生的,而不是一直发生的。
不过还是要去搞清楚根本原因
以及:点击后反应比较慢,要稍等1,2秒才显示上面弹框
-》之前都是瞬间就弹框
或者是 无弹框,Service activated是false
换去:
调试RI+ 运行core
结果:
和之前类似:
点击Service Status,就会导致重新初始化
然后回到主页了。。。
不过第一次触发时,代码是可以调试和运行的。
但是后续逻辑,为何会导致此现象,就不是很清楚了。
然后就等后续详细调试,找找原因。
不过暂时还是不去解决了。
因为另外一个安卓手机 安卓10的小米9 中,此处:
始终都没报错:
而可以正常显示:
Service activated:true
(但
Service started:false
而已)
所以暂时不去深究。以后有需要再去深究,为何安卓9的红米Note8Pro中,会偶尔报错:API is not compatible
【后记】
换安卓10的小米9去调试:
然后继续,但是换安卓10的小米9去调试看看,为何service started是false
首次都会提示:
允许USB调试
点击确定
注意到此处,调试RI时,
小米9和之前红米Note8Pro类似,都会遇到这个异常:
src/main/java/com/gsma/services/rcs/capability/CapabilityService.java
public final void connect() throws RcsPermissionDeniedException {

} catch (RcsServiceException e) {
    throw new RcsPermissionDeniedException(
            "The compatibility of TAPI client version with the TAPI service implementation version of this device cannot be checked for the capability service!",
            e);
即:
TAPI的client版本
TAPI的service版本
去检测兼容性时,根本都无法正常检测
-》更别提后续的 能正常检测 但是不一致的错误了。。。
-》其是另外的代码段:
if (!sApiCompatible) {
    throw new RcsPermissionDeniedException(
            "The TAPI client version of the capability service is not compatible with the TAPI service implementation version on this device!");
}
继续重新调试,看看isCompatible内部结果如何
结果:
和之前一样:
在queryRcsStackByIntent中,broadcastReceiver.getResultExtras返回的result是:null
所以无法获取到
所以导致后续的connect才报错,无法获取兼容性的
那问题就又转到了:
queryRcsStackByIntent中的
此处也怀疑:或许是小米9中core处于后台,进程被干掉,导致无法返回结果?
去看看,可能也是
总之也是:
后台配置:智能限制后台运行
去改为 无限制
然后另外也把settings,RI都改为无限制
再重新调试看看
然后可以返回result结果了:
【结论】
(安卓10的)小米9中,和之前(安卓9的)红米Note8Pro 也会存在
由于core等apk,不在前台,就处于后台,不在运行,导致服务不可用,导致上面的 获取compatible是否兼容,都会报错
而原因和之前的
【已解决】rcsjta的settings中关闭重新开启RCS Service会报错:Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE see Logcat
都是类似的:
都是 安卓中 ,由于(core,settings,RI等几个)apk 默认安装后 省电策略是:智能限制后台运行
导致当进入后台,服务估计被干掉了,导致其他apk去调用intent去获取结果
都会失败
此处先后导致的问题有:
  • 是否兼容
    • Intents.Service.EXTRA_GET_COMPATIBILITY_RESPONSE
      • -》导致RI中Service status中报错:
        • 获取兼容性时异常
          • Failed to read stack started status
  • activation mode 激活模式
    • GET的
      • Intents.Service.EXTRA_GET_ACTIVATION_MODE
        • -》会导致settings中报错:
          • Failed to get result for com.gsma.service.rcs.action.GET_ACTIVATION_MODE
    • SET的
      • Intents.Service.EXTRA_SET_ACTIVATION_MODE
        • -》会导致settings中报错:
          • Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE
而解决办法,很简单:
确保core(和其他几个apk)的 省电模式 改为 无限制
-》避免了处于后台时,服务被干掉了
-》确保了其他apk(RI,settings等),去通过Intent去访问core时,能正常返回结果,而不会报(无法获取到结果的)错
如此,即可正常的:
(1)RI中Service Status页面不会偶尔报错:
API is not compatible
Failed to read stack started status
了,至少可以正常显示结果了:
(2)settings中能正常关闭后重新开启RCS service了:

转载请注明:在路上 » 【已解决】rcsjta中RI检测core的Service的status时报错:API is not compatible

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.147 seconds, using 21.67MB memory