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

