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

Android 14中TileService启动Activity受限问题及解决方法

解决Android 14中TileService无法启动Activity的问题

Android 14对TileService的行为新增了安全限制,禁止直接调用startActivity()或startActivityAndCollapse()启动Activity,必须通过PendingIntent实现该需求,具体实现步骤如下:

  1. 创建启动目标Activity的Intent

    val intent = Intent(this, TargetActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    
  2. 构建PendingIntent(Android 12+建议添加FLAG_IMMUTABLE)

    val pendingIntent = PendingIntent.getActivity(
        this,
        0, // 请求码可根据业务需求调整
        intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    
  3. 在TileService的onClick()方法中,使用新增API启动并手动折叠面板

    override fun onClick() {
        super.onClick()
        pendingIntent?.let {
            // Android 14专属API:通过PendingIntent启动Activity
            launchActivityFromPendingIntent(it)
            // 手动折叠快捷设置面板,替代原startActivityAndCollapse()的折叠逻辑
            collapsePanel()
        }
    }
    

关键说明

  • Android 14要求TileService启动Activity必须通过PendingIntent,直接传入Intent会触发安全校验抛出异常
  • launchActivityFromPendingIntent()是Android 14为TileService新增的API,专门用于适配该限制
  • 原startActivityAndCollapse()包含的"启动+折叠"逻辑需要拆分,手动调用collapsePanel()完成面板折叠

多版本兼容实现

如果需要兼容Android 13及更低版本,可以添加版本判断:

override fun onClick() {
    super.onClick()
    val intent = Intent(this, TargetActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
        val pendingIntent = PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
        launchActivityFromPendingIntent(pendingIntent)
        collapsePanel()
    } else {
        // 低版本沿用原有逻辑
        startActivityAndCollapse(intent)
    }
}

内容的提问来源于stack exchange,提问作者Style-7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:13:12