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
相关产品推荐
相关产品推荐

