折腾:
【记录】研究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服务启动逻辑