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

Android使用Activity Recognition采样API时extractResult返回null

问题排查方案

1. 权限配置排查

  • 首先确认AndroidManifest中已正确声明活动识别权限:Android 10(API 29)及以上需要android.permission.ACTIVITY_RECOGNITION,且必须动态申请,仅清单声明无效;API 28及以下需要com.google.android.gms.permission.ACTIVITY_RECOGNITION。
  • 检查JobIntentService的声明是否正确,必须添加android:permission="android.permission.BIND_JOB_SERVICE"属性,否则服务无法正常接收系统回调的Intent。

2. PendingIntent配置排查

  • 你创建用于注册活动识别回调的PendingIntent必须和启动JobIntentService的Intent完全匹配:
    • 确保PendingIntent使用的ComponentName明确指向你的JobIntentService实现类,不要用隐式Intent,Android 8.0及以上隐式Intent无法唤醒后台服务。
    • 检查PendingIntent的flag配置:Android 12及以上必须使用PendingIntent.FLAG_MUTABLE,如果设置了FLAG_IMMUTABLE会导致系统无法修改Intent携带的识别结果数据,最终extractResult返回null。

3. 服务端接收逻辑排查

  • 调用ActivityRecognitionResult.extractResult(intent)前先判断Intent是否携带对应extra:可以先调用intent.hasExtra(ActivityRecognitionResult.EXTRA_ACTIVITY_RESULT)确认数据存在,避免空意图调用方法返回null。
  • JobIntentService的onHandleWork方法中不要提前清空Intent的extra数据,也不要对Intent做修改操作,直接传入extractResult方法即可。

4. 依赖版本排查

  • 确认应用级build.gradle中Activity Recognition依赖版本正确,建议使用稳定版:
    dependencies {
        implementation 'com.google.android.gms:play-services-location:21.0.1'
    }
    
    过高或过低的版本都可能存在和当前系统GMS服务不兼容的问题,导致回调数据为空。

5. 后台运行限制排查

  • 部分国产定制ROM会限制应用后台活动采集权限,需要在系统设置中手动开启应用的「身体活动权限」、「后台活动权限」,禁止电池优化,否则系统会拦截活动识别回调数据,导致Intent为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:45:08