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

Pepper实机运行安卓应用时onRobotFocusGained()不触发问题咨询

问题修复方案

核心故障原因

  • 导入包路径错误:代码中所有com.aldebaran相关的导入前面多了多余的android.前缀,导致QiSDK相关类加载失败,注册机器人生命周期回调失效,自然无法触发onRobotFocusGained
  • 日志打印逻辑错误:代码中打印上下文的语句实际输出的是固定字符串,没有打印真实的robotContext变量值,不利于排查

Pepper机器人焦点触发机制

  • 机器人焦点是Pepper系统独有的生命周期,优先级高于安卓原生生命周期:只有满足以下所有条件时,才会回调onRobotFocusGained
    • 当前Activity继承自RobotActivity且处于前台可见状态
    • 已经调用QiSDK.register完成回调注册,且没有抛出类加载异常
    • 机器人处于空闲状态,没有被其他应用、系统服务抢占焦点,也没有触发安全报警、低电量等异常状态
  • 如果焦点申请失败,系统会回调onRobotFocusRefused,可以在该方法中打印reason参数查看具体失败原因

修复后最简可运行代码

package com.example.hello_pepper_2

import android.os.Bundle
import android.util.Log
import com.aldebaran.qi.sdk.QiContext
import com.aldebaran.qi.sdk.QiSDK
import com.aldebaran.qi.sdk.RobotLifecycleCallbacks
import com.aldebaran.qi.sdk.`object`.conversation.Say
import com.aldebaran.qi.sdk.builder.SayBuilder
import com.aldebaran.qi.sdk.design.activity.RobotActivity

class MainActivity : RobotActivity(), RobotLifecycleCallbacks {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        QiSDK.register(this, this)
        setContentView(R.layout.activity_main)
        Log.e("MSG", "onCreate")
    }

    override fun onDestroy() {
        QiSDK.unregister(this, this)
        super.onDestroy()
    }

    override fun onRobotFocusGained(qiContext: QiContext) {
        Log.e("MSG", "onRobotFocusGained")
        val say = SayBuilder.with(qiContext)
            .withText("Hello Humans")
            .build()
        say.run()
    }

    override fun onRobotFocusLost() {
        Log.e("MSG", "onRobotFocusLost")
    }

    override fun onRobotFocusRefused(reason: String) {
        Log.e("MSG", "onRobotFocusRefused: $reason")
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:45:01