You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wear OS Complication.setTapAction无法启动Activity问题求助

问题排查与修复方案

1. 修正PendingIntent的创建时机与Flag

你的代码中pendingIntent作为成员变量在类初始化阶段创建,此时Service上下文尚未完全就绪,易导致PendingIntent无效。同时针对Android 12+版本,必须指定IMMUTABLE或MUTABLE类型的Flag:

将Intent和PendingIntent的创建改为延迟初始化,同时补充必要Flag:

private val pendingIntent by lazy {
    val intent = Intent(applicationContext, MainActivity::class.java).apply {
        // 从Service启动Activity必须添加此Flag
        addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        component = ComponentName(this@CustomComplication, MainActivity::class.java)
    }
    // 根据系统版本设置正确的Flag组合
    val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    } else {
        PendingIntent.FLAG_UPDATE_CURRENT
    }
    PendingIntent.getActivity(applicationContext, 0, intent, flags)
}

2. 调整SharedPreferences的初始化逻辑

成员变量prefs和tempF在类初始化时调用getSharedPreferences,此时Service未完成创建,可能获取不到正确的实例。建议改用延迟初始化,并在请求时实时获取最新值:

private val prefs by lazy {
    getSharedPreferences("MY_PREFS_NAME", MODE_PRIVATE)
}

override suspend fun onComplicationRequest(request: ComplicationRequest): ComplicationData? {
    // 实时获取最新的tempF值
    val tempF = prefs.getString("tempF", "")
    Log.d("BABT", "onComplicationRequest() id: ${request.complicationInstanceId}")

    return when (request.complicationType) {
        ComplicationType.SHORT_TEXT -> ShortTextComplicationData.Builder(
            text = PlainComplicationText.Builder(text = tempF.toString()).build(),
            contentDescription = PlainComplicationText
                .Builder(text = "Short Text version of Number.").build(),
        ).setMonochromaticImage(
            MonochromaticImage.Builder(
                image = Icon.createWithResource(this, R.drawable.iconforbody),
            ).build(),
        )
            .setTapAction(pendingIntent)
            .build()

        else -> {
            if (Log.isLoggable("BABT", Log.WARN)) {
                Log.w("BABT", "Unexpected complication type ${request.complicationType}")
            }
            null
        }
    }
}

3. 检查MainActivity的Manifest配置

确认MainActivity在AndroidManifest.xml中正确注册,且没有设置阻止启动的属性:

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

内容的提问来源于stack exchange,提问作者SP Apps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:37:31