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

【已解决】rcsjta的settings中关闭重新开启RCS Service会报错:Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE see Logcat

报错 crifan 248浏览 0评论
折腾:
【无法解决】调试rcsjta的settings以触发setActivationMode设置激活模式以去找RCS服务启动逻辑
期间,对于rcsjta的settings中的:
RCS Service
点击关闭后,再点击打开,会出错:
对于:
com.gsma.services.rcs.action.SET_ACTIVATION_MODE
Failed to get result
这也就是,之前就看到过的,app弹框提示的异常:
Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE see Logcat
再去logcat中看看
后记:
之前也遇到同样的问题
后来去看了看
【未解决】通过调试rcs的core加运行其他几个apk去研究rcsjta的服务没运行的原因
发现的确只是类似,但不同的问题:
提示:
Information
Failed to get result for com.gsma.service.rcs.action.GET_ACTIVATION_MODE see Logcat!
即:
之前是:GET_ACTIVATION_MODE 报错
现在是 SET_ACTIVATION_MODE 报错
现在问题就回到了:
上述 RCS Settings中,对于 显示的已开启的rcs的core的service,点击去关闭后,再点击重新开启
会报错SET_ACTIVATION_MODE无法获取结果
但是对应着代码中的
src/com/gsma/rcs/service/RcsServiceControlReceiver.java
private class IntentProcessor extends Thread {

public void run() {

case Intents.Service.ACTION_SET_ACTIVATION_MODE: {
    boolean active = mIntent.getBooleanExtra(
            Intents.Service.EXTRA_SET_ACTIVATION_MODE, true);
    activationMode = setActivationMode(mCtx, active);
    mResult.putBoolean(Intents.Service.EXTRA_SET_ACTIVATION_MODE,
            activationMode);
    if (sAccurateLog && sLogger.isActivated()) {
        sLogger.debug("setActivationMode(" + active + ") -> " + activationMode);
    }
    break;
此处,看起来是属于core的
而此处已经通过手动启动运行core了
且根据之前其他的case,比如ACTION_GET_SERVICE_STARTING_STATE 也是能正常运行的来看
此处的core代码是正常的,没问题的
但是为何对于ACTION_SET_ACTIVATION_MODE却无法返回结果,而导致此处报错?
要是Android Studio中能同时调试2个apk(core+settings)就好了,就容易找原因了
暂时不去深究
突然想到,可以反过来:
调试core + 运行settings
看看效果
有些奇怪的就是:
运行settings,也会发送:
com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE
以及:结果也是null
但是呢,settings中,(之前一直就是这样)却勾选了:RCS service 的选项:
所以逻辑上,一直是不对的。
不过也还是和之前一样,去点击关闭,再点击尝试开启。
看看能否运行到此处的ACTION_SET_ACTIVATION_MODE
此处是能
onReceive 到 这个
Intent { act=com.gsma.services.rcs.action.SET_ACTIVATION_MODE flg=0x10000010 pkg=com.gsma.rcs cmp=com.gsma.rcs/.service.RcsServiceControlReceiver (has extras) }
但是后面却没有进入到
IntentProcessor的run,没进入其中的case中
并且再多次测试后发现:
点击关闭,到弹框显示出错
甚至连前面的onReceive都没运行到,更别提后面的IntentProcessor的run的case了。
算了,单独调试settings,看看出错时是否有logcat
发现个现象:
调试settings -》 启动后,RCS service,的确没有勾选,是灰色的-》表示RCS service没启动
然后手动去运行RCS Provisioning=core,RCS service的确显示已勾选,表示RCS service已启动
貌似是没问题的。
再去点击关闭看看
此处这次调试,竟然没报错:
完美的,正常的,关闭了 RCS Service:
突然想到:
难道是此处安卓手机(红米Note8Pro)对于后台线程控制的很严格
当core进入后台,就被限制了接收发送的消息 intent?
那去想办法看看当前的设置,把RCS的几个apk都设置为进入后台时,仍能运行,而不会被干掉,服务可用
应用信息:
还真的是:
core和settings,都是 智能限制
去进去看看:
意思是:
  • 智能限制后台运行(推荐)
    • 智能识别应用及状态,并采取相应的限制措施,包括对后台联网、定位、传感器使用或CPU占用的限制,不影响及时消息
点击切换到:
  • 无限制
    • 不采取任何限制措施
类似的settings也去设置为:无限制
然后再去调试看看
是否能确保:
每次的RCS的settings中,都能:
检测和显示:已开启
点击后,能正常的关闭,不报错,无错误弹框,能正常的关闭,显示:已关闭
看起来,都是正常的:
result都不是null了。都有值了。
【总结】
此处rcsjta的settings的apk中:
RCS Service
点击关闭再点击打开
偶尔或者说经常会报错
Failed to get result for com.gsma.service.rcs.action.GET_ACTIVATION_MODE
和:
Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE
原因:RCS的service的后台服务不可用,无法返回对应结果
根本原因:
RCS的service,是由rcsjta的另外一个core的apk去启动的
而当测试非core的其他的apk,比如此处的settings时,往往就会打开settings,而把core切换到后台了
由于core等apk的 省电策略 默认配置是:智能限制
导致当core被切换到后天时,估计对应的service等服务也被干掉或者受影响了,使得没有及时接收到外部传来的GET_ACTIVATION_MODE、SET_ACTIVATION_MODE等action,无法返回对应的result结果,导致此处settings的弹框报错
解决办法:
把core(和其他一些rcsjta)的apk,都把权限改为:无限制
即可保证,即使core被切换到后台,service也能,稳定的,运行(而不被干掉或干扰),从而避免了其他的apk中intent的action无法获取到返回result结果的问题。

转载请注明:在路上 » 【已解决】rcsjta的settings中关闭重新开启RCS Service会报错:Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE see Logcat

发表我的评论
取消评论

表情

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

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