设置模块一级菜单添加遥控器功能
文章目录
- 问题点
- 问题分析
- 资源和源码分析
- 解决方案
- 源码分析
- 找到对应的Activity
- menifest 分析
- SettingsHomepageActivity 分析
问题点
MTK Android12/13 系统设置一级界面,蓝牙遥控器无法上下滑动页面。
备注:自己对设置整个模块系统其实并不熟悉,哪里有问题就直接针对问题来修复,更改。 还好都解决了,空了还是需要研究下源码,整体架构思想上掌握。
问题分析
这个明显是焦点问题,Settings 理论上 布局是能够上下滑动的【RecycleView Scrollview】
资源和源码分析
这里可以看我提供的附件:附件地址
MTK 对应的Android13 设置的SettingsHomepageActivity.java和笔记
在线源码地址:
解决方案
修改文件:SettingsHomepageActivity.java
路径:\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\homepage\SettingsHomepageActivity.java
修改内容:
private void initHomepageContainer() {final View view = findViewById(R.id.homepage_container);// Prevent inner RecyclerView gets focus and invokes scrolling.//modify start // view.setFocusableInTouchMode(true);// view.requestFocus();//modify end}
源码分析
找到对应的Activity
以前进入设置界面,都是敲命令
adb shell am start com.android.settings/.Settings
那理论上就是找Settings 这个Activity了;通过dumps activity top | grep Activity 得到的也是Settings 的。
C:\Users\Administrator>adb shell
DisPlay:/ # dumpsys activity top | grep ACTIVITYACTIVITY com.fise.dmseries/.ui.main.MainActivity 37d25e pid=1980ACTIVITY com.android.settings/.Settings 5865ddb pid=1498
DisPlay:/ #
menifest 分析
找到Settings
<!-- Alias for launcher activity only, as this belongs to each profile. --><activity-alias android:name="Settings"android:label="@string/settings_label_launcher"android:taskAffinity="com.android.settings.root"android:launchMode="singleTask"android:exported="true"android:targetActivity=".homepage.SettingsHomepageActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/></activity-alias>
这里说明 Settings 只是一个 activity-alias ,真正指向到 homepage.SettingsHomepageActivity
那就到activity SettingsHomepageActivity 配置看看
<activity android:name=".homepage.SettingsHomepageActivity"android:label="@string/settings_label_launcher"android:theme="@style/Theme.Settings.Home"android:taskAffinity="com.android.settings.root"android:launchMode="singleTask"android:exported="true"android:configChanges="keyboard|keyboardHidden"><intent-filter android:priority="1"><action android:name="android.settings.SETTINGS" /><category android:name="android.intent.category.DEFAULT" /></intent-filter><meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"android:value="true" /></activity>
上面配置分析Settings、SettingsHomepageActivity 说明清楚了:
Settings 正在的主界面是SettingsHomepageActivity, Settings 只是设置app 主界面的一个别名 alias。
能够通过命令adb shell am start -n com.android.settings/.Settings 来调用
SettingsHomepageActivity 分析
关注下这个方法:
private void initHomepageContainer() {final View view = findViewById(R.id.homepage_container);// Prevent inner RecyclerView gets focus and invokes scrolling.view.setFocusableInTouchMode(true);view.requestFocus();}
看注释: // Prevent inner RecyclerView gets focus and invokes scrolling.
就是说阻止内部的RecycleView 获取焦点然后滑动
看着像这个原因导致的,那就把它去掉,重新编译固件,发现解决问题了。