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

【无法解决】调试rcsjta的settings以触发setActivationMode设置激活模式以去找RCS服务启动逻辑

调试 crifan 354浏览 0评论
折腾:
【记录】研究rcsjta中的RcsCoreService的代码调用逻辑和顺序
期间,对于setActivationMode,已经找到2处调用:
(1)src/com/gsma/rcs/core/control/settings/SettingsDisplay.java
public class SettingsDisplay extends RcsPreferenceActivity implements
        Preference.OnPreferenceChangeListener {

    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
。。。
                    mRcsServiceControl.setActivationMode(true);
-》好像是设置页面中,点击了选项后,才会触发去设置 激活模式
(2)src/com/gsma/rcs/core/control/settings/SettingsDisplay.java
public class SettingsDisplay extends RcsPreferenceActivity implements
        Preference.OnPreferenceChangeListener {

    protected Dialog onCreateDialog(int id) {

        mRcsServiceControl.setActivationMode(false);
对于onCreateDialog像是:当创建对话框时
很明显这2个,没有代码中的直接调用了。
要去找找,具体是哪个apk中哪个界面了
很明显是:settings 中的
去看看settings中的哪个页面
从代码中的:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.rcs_settings_preferences);


    initialize();


    mRcsActivationCheckbox = (CheckBoxPreference) getPreferenceScreen().findPreference(
            "rcs_activation");
    mBatteryLevel = (ListPreference) findPreference("min_battery_level");
去找:
res/xml/rcs_settings_preferences.xml
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <CheckBoxPreference
        android:key="rcs_activation"
        android:summaryOff="@string/rcs_settings_summary_rcs_service_off"
        android:summaryOn="@string/rcs_settings_summary_rcs_service_on"
        android:title="@string/rcs_settings_label_rcs_service" />


    <ListPreference
        android:dialogTitle="@string/rcs_settings_label_min_battery_level"
        android:entries="@array/rcs_settings_list_battery_level_label"
        android:entryValues="@array/rcs_settings_list_battery_level_value"
        android:key="min_battery_level"
        android:summary="@string/rcs_settings_summary_min_battery_level"
        android:title="@string/rcs_settings_label_min_battery_level" />


    <PreferenceScreen
        android:key="userprofile_settings"
        android:summary="@string/rcs_settings_summary_userprofile_settings"
        android:title="@string/rcs_settings_title_userprofile_settings" >
        <intent
            android:action="android.intent.action.MAIN"
            android:targetClass="com.gsma.rcs.core.control.settings.UserprofileSettingsDisplay"
            android:targetPackage="com.gsma.rcs.core.control" />
    </PreferenceScreen>
    <PreferenceScreen
        android:key="messaging_settings"
        android:summary="@string/rcs_settings_summary_messaging_settings"
        android:title="@string/rcs_settings_title_messaging_settings" >
        <intent
            android:action="android.intent.action.MAIN"
            android:targetClass="com.gsma.rcs.core.control.settings.MessagingSettingsDisplay"
            android:targetPackage="com.gsma.rcs.core.control" />
    </PreferenceScreen>
    <PreferenceScreen
        android:key="about_settings"
        android:summary="@string/rcs_settings_summary_about"
        android:title="@string/menu_about" >
        <intent
            android:action="android.intent.action.MAIN"
            android:targetClass="com.gsma.rcs.core.control.settings.AboutSettings"
            android:targetPackage="com.gsma.rcs.core.control" />
    </PreferenceScreen>


</PreferenceScreen>
很明显,就是settings中的主界面
去调试settings看看
然后由于
RCS service 
是灰色的,表示服务没启动,都没法点击了
需要重新调试看看
手动运行core,再去调试settings
后来发现,貌似此处可以返回result了?
以及后续的:
isActivationModeChangeable
也可以返回结果:
此处显示service启动了?
然后此处
至少
RCS Service
是启动了,已勾选的状态了
和之前多次调试时一致了
然后继续调试,点击看看能否触发激活模式
点击OK去
RCS service will be terminated
后,代码也的确可以执行到:
mRcsServiceControl.setActivationMode(false);
此部分代码逻辑看起来没问题。
再去点击 以开启试试
去执行:
mRcsServiceControl.setActivationMode(true);
看看
但是:
【已解决】rcsjta的settings中关闭重新开启RCS Service会报错:Failed to get result for com.gsma.service.rcs.action.SET_ACTIVATION_MODE see Logcat
对了,另外也给RI加上不限制:
然后再去运行RI中,看看status检测是否正常了:
不过此处发现诡异 或者说 奇怪现象:
从 Service-》Service Status
点击后,导致重新init初始化
又回到主界面了。。。
那去:
调试core + 运行RI
看看效果
结果还是会报错,之前见过的:
【已解决】rcsjta中RI检测core的Service的status时报错:API is not compatible
重新调试RI+运行core试试,尽量找代码内部运行逻辑
重新调试,找到一些错误现象,知道为何重新初始化的原因了:
【已解决】rcsjta的RI运行报错:java.lang.SecurityException Not allowed to bind to service Intent
不过,感觉还是要去解决:
【已解决】rcsjta中RI检测core的Service的status时报错:API is not compatible
至此,清楚了,要确保core是无限制,才能保证其他apk稳定的访问service和返回需要的结果
但是对于Service started是false,则需要去搞清楚为何了。
然后继续调试,试试:
调试core + 运行settings,重启service,看看能否触发setActivationMode
不过记得好像是:
的确是可以运行到了:ACTION_SET_ACTIVATION_MODE
且也只是:activate=激活,且也显示true了
但是没有 started=启动,即
只激活 但没 启动
所以:此处希望通过ACTION_SET_ACTIVATION_MODE,即setActivationMode去找service启动逻辑,是无法实现了。
放弃此路。

转载请注明:在路上 » 【无法解决】调试rcsjta的settings以触发setActivationMode设置激活模式以去找RCS服务启动逻辑

发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
90 queries in 0.180 seconds, using 23.30MB memory