如何在WearOS上实现表冠/主页按钮点击事件切换表盘与应用列表?
实现WearOS启动器表盘与应用列表的切换功能
一、拦截主页按钮与表冠点击事件
由于你的应用已经覆盖系统启动器,可直接在启动器主Activity中重写按键事件处理方法,拦截主页按钮和表冠点击的触发信号:
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return when (keyCode) { // 主页按钮 KeyEvent.KEYCODE_HOME, // 表冠点击事件(部分设备可能用KEYCODE_STEM_1,需根据设备适配) KeyEvent.KEYCODE_STEM_PRIMARY -> { toggleInterface() true // 消费事件,阻止系统默认行为 } else -> super.onKeyDown(keyCode, event) } }
Java版本实现:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME || keyCode == KeyEvent.KEYCODE_STEM_PRIMARY) { toggleInterface(); return true; } return super.onKeyDown(keyCode, event); }
二、实现核心切换逻辑
toggleInterface()方法需要判断当前显示状态,完成应用列表与表盘的双向切换:
1. 从应用列表切换到表盘
通过隐式Intent启动系统表盘(无需硬编码包名,适配不同WearOS设备):
private fun toggleInterface() { if (isAppListVisible()) { // 切换至系统表盘 val dialerIntent = Intent(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_HOME) flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } startActivity(dialerIntent) } else { // 切换回应用列表(显示你的启动器界面) showAppList() } }
2. 从表盘切换回应用列表
如果启动器主Activity设置为单任务模式(推荐配置),启动自身即可回到应用列表:
private fun showAppList() { val launcherIntent = packageManager.getLaunchIntentForPackage(packageName)?.apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP } launcherIntent?.let { startActivity(it) } }
若应用列表和表盘预览在同一个Activity的不同Fragment/View中,直接切换视图或Fragment即可,无需启动新Activity。
三、关键配置与注意事项
- 默认启动器配置:确保Manifest中已正确声明启动器Activity的intent-filter,保证系统优先调用你的应用:
<activity android:name=".MainLauncherActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
- 设备适配:部分WearOS设备的表冠点击KeyCode可能为
KEYCODE_STEM_1或KEYCODE_STEM_2,可通过日志打印keyCode值确认适配。 - 动画优化:添加切换动画提升体验,比如在启动Activity时调用
overridePendingTransition(R.anim.fade_in, R.anim.fade_out)。
内容的提问来源于stack exchange,提问作者Thomas Basile
相关产品推荐
相关产品推荐

