Pepper实机运行安卓应用时onRobotFocusGained()不触发问题咨询
问题修复方案
核心故障原因
- 导入包路径错误:代码中所有
com.aldebaran相关的导入前面多了多余的android.前缀,导致QiSDK相关类加载失败,注册机器人生命周期回调失效,自然无法触发onRobotFocusGained - 日志打印逻辑错误:代码中打印上下文的语句实际输出的是固定字符串,没有打印真实的
robotContext变量值,不利于排查
Pepper机器人焦点触发机制
- 机器人焦点是Pepper系统独有的生命周期,优先级高于安卓原生生命周期:只有满足以下所有条件时,才会回调
onRobotFocusGained- 当前Activity继承自
RobotActivity且处于前台可见状态 - 已经调用
QiSDK.register完成回调注册,且没有抛出类加载异常 - 机器人处于空闲状态,没有被其他应用、系统服务抢占焦点,也没有触发安全报警、低电量等异常状态
- 当前Activity继承自
- 如果焦点申请失败,系统会回调
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
相关产品推荐
相关产品推荐

