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

使用ActivityRecognition时TILTING/UNKNOWN状态转换更新报错

解决ActivityTransitionRequest中TILTING/UNKNOWN类型报错的问题

你在使用Android ActivityRecognition功能时,遇到了针对DetectedActivity.TILTING和DetectedActivity.UNKNOWN请求状态转换更新的报错,其他活动类型却正常工作对吧?我来帮你梳理下问题根源和解决办法:

问题核心原因

Android的Activity Transition API并不支持为TILTING和UNKNOWN这两种活动类型创建状态转换请求,这是由它们的特性决定的:

  • UNKNOWN:系统无法识别当前活动状态,本身不存在明确的"进入/退出"状态转换逻辑;
  • TILTING:属于瞬时性动作,而非持续性的活动状态,Transition API不追踪这类瞬时事件的状态变化。

修正后的代码示例

你需要从ActivityTransitionRequest的配置中移除这两种活动类型的转换规则,只保留API支持的活动类型。以下是调整后的代码片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent(this, ActivityRecognizedService.class);
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    // 仅创建API支持的活动类型转换规则
    List<ActivityTransition> transitions = new ArrayList<>();
    // 示例:添加步行、跑步等有效活动类型的转换逻辑
    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.WALKING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
            .build());
    transitions.add(new ActivityTransition.Builder()
            .setActivityType(DetectedActivity.RUNNING)
            .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
            .build());
    // 注意:不要加入TILTING或UNKNOWN的转换规则

    ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);

    // 发起活动转换更新请求
    ActivityRecognition.getClient(this)
            .requestActivityTransitionUpdates(request, pendingIntent)
            .addOnSuccessListener(unused -> {
                // 请求成功后的处理逻辑
            })
            .addOnFailureListener(e -> {
                // 捕获并处理异常
                Log.e("ActivityRecognition", "请求转换更新失败", e);
            });
}

额外替代方案

如果你需要检测TILTING动作,可以改用Sensor API(比如加速度传感器)直接监听设备的倾斜变化;对于UNKNOWN状态,你可以在收到其他活动类型的退出事件后,自行判断当前处于未知状态,无需通过Transition请求获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:05:05