创建一个机器人技能
在创建第一个机器人应用后就可以开始创建技能了,你可以在技能中使用机器人的各种基础服务来自定义机器人的功能。
下面的例子将实现一个简单报时的技能,它的功能是在被触发时播报当前时间。
配置服务
技能开发除了需要添加依赖库、配置权限之外(参考 创建第一个机器人应用), 还要单独配置技能服务, 用于系统启动技能。
打开app/src/main/AndroidManifest.xml文件,在 <application>标签内添加Bootstrap服务。
<application> <service android:name="com.ubtrobot.app.Bootstrap" android:exported="true" /> </application>
创建技能
在之前创建的机器人应用中的模块包名目录下创建一个TimerSkill类,并继承RobotSkill。
public class TimerSkill extends RobotSkill { }
同时在app/src/main/res/xml/文件夹下创建robot_manifest.xml文件,并添加以下内容。
<manifest> <skill class="com.ubtrobot.demo.TimerSkill" name="timer"> </skill> </manifest>
上述代码中配置了一个名称为timer的Skill, 它的路径为com.ubtrobot.demo.TimerSkill。
添加指令接收方法
创建Skill后需要在Skill类中添加指令接收方法,用于接收指令进行处理。这里举例新增timeIndicate方法,使用@OnDirective注解,并为其配置一个action属性
public class TimerSkill extends RobotSkill { @OnDirective(action = "timer.indicator") public void timeIndicate(Directive directive) { } }
在robot_manifest.xml的<skill/>标签中添加<directive/>指令标签,其中action需要与上面代码中的action相同。
<manifest> <skill class="com.ubtrobot.demo.TimerSkill" name="timer"> <directive action="timer.indicator" /> </skill> </manifest>
实现报时功能
在 timeIndicate 方法中获取当前时间,并使用语音服务播报。
public class TimerSkill extends RobotSkill { @OnDirective(action = "timer.indicator") public void timeIndicate(Directive directive) { //获取当前时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分"); String timeStr = "现在是:" + simpleDateFormat.format(new Date()); //使用语音服播报当前时间 SpeechManager speechManager = getSystemService(SpeechManager.SERVICE); speechManager.synthesize(timeStr); } }
模拟指令发送
Skill已经完成,机器人已经有了报时的功能,那么如何使用这个功能呢? 下面我们将模拟一条指令,发送到Skill 启动它。
在MainActivity中添加以下代码:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //发送指令 Robot.globalContext().dispatchDirective("timer.indicator"); } }
安装并运行应用,你将听到机器人为你播报当前时间。
以上就是实现一个简单的 Skill 的过程,Skill 还有很多功能,具体请查看 skill。
更多服务
上面我们使用了语音服务播报时间,同时我们也可以为报时加上其他效果,例如:
使用灯光服务添加灯效
LightManager lightManager = getSystemService(LightManager.SERVICE); lightManager.displayEffect(lightId, effectUri);
使用表情服务显示表情
EmotionManager emotionManager = getSystemService(EmotionManager.SERVICE); emotionManager.express(emotionUri);
使用舵机服务添加某些动作
ServoManager servoManager = getSystemService(ServoManager.SERVICE); servoManager.rotate(rotationOption);
实现一个机器人技能需要调用大量机器人的基础功能。Cruzr实现了许多基础服务,你可以使用这些服务实现各种特效,具体请查看 系统服务 章节。