让我们用不到50行代码来开发一个跨平台语音生活助手(可运行于iPhone和Android),它会回答以下类似问题:
下载客户端,点击“演示帐号”按钮,登录后,点击“语音”输入语音指令即可。
如果安卓版没有语音应答,可能是没有支持中文的TTS,下载安装中文TTS到手机。
具体开发过程如下。
图灵机器人开发帐号,tuling123.com。 注意:选择接入场景为【自定义】,不要选择【微信机器人】,【QQ机器人】,【智能车载】,【智能家居】。
打开HomeCenter设计器(本文结尾附安装说明),设计器缺省打开"MyFirst"工程,
点击左侧"My Project/Events/SYS_PROJ_STARTUP",
将下列代码粘贴到编辑区,注意:请将图灵机器人key改为相应注册值
#encoding:utf-8
import Java::hc.server.util.Assistant
import Java::hc.server.ui.ProjectContext
import Java::hc.server.util.json.JSONObject
myAssistant = Class.new(Assistant) {
def onVoice(cmd)
json = JSONObject.new()
json.put("key", "1234567890")#注意:请改为你的图灵机器人key
json.put("info", cmd.getText())
#为获取手机GPS位置,需开启工程权限[Location of mobile],详见文档API。将鼠标移至方法上即可获得文档。
#cmd.getLocationLatitude()#纬度
#cmd.getLocationLongitude()#经度
ctx = ProjectContext::getProjectContext()
#json.put("userid", ctx.getLoginID())#可能多个家庭成员共用
json.put("userid", ctx.getMobileSoftUID())#手机重装客户端后,会重新分配SoftUID,但不会出现家庭成员共用
json = json.request("http://www.tuling123.com/openapi/api")
if json.nil?
ctx.sendMovingMsg("网络故障:" + cmd.getText())
ctx.error("网络故障:http://www.tuling123.com/openapi/api")
else
ctx.log("语音命令:[" + cmd.getText() + "],回应:" + json.toString())
#正常回应示例 :{"text":"亲,已帮你找到信息","code":200000,"url":"http://homecenter.mobi/abc"}
if json.has("code") && (json.getInt("code") == 100000 || json.getInt("code") == 200000)
if json.has("text")
ctx.sendVoice(json.getString("text"))
end
if json.has("url")
ctx.goExternalURLWhenInSession(json.getString("url"))
end
return true
end
end
return false
end
}.new
ctx = ProjectContext::getProjectContext()
ctx.registerAssistant(myAssistant)
由于访问云端,需要网络权限,点击[My Project]/[Permission]打开权限面板,可选择下列任一方法:
点击“Activate”按钮以应用本工程,
启动手机端并登录,(此处为服务器帐号,而非演示帐号)
点击手机端首页菜单中的“语音”,输入如下:
将上例的代码全部删除,更改如下:
#encoding:utf-8
import java.lang.Integer
import Java::hc.server.util.Assistant
import Java::hc.server.ui.ProjectContext
import Java::hc.server.util.JavaString
myAssistant = Class.new(Assistant) {
def onVoice(cmd)
if cmd.startsWithText("加")
num = Integer.parseInt(cmd.substringText(1))
total = cmd.getClientSession().getAttribute("total")
if total.nil?
cmd.getClientSession().setAttribute("total", JavaString.valueOf(num))
else
num_total = Integer.parseInt(total)
cmd.getClientSession().setAttribute("total", JavaString.valueOf(num_total + num))
end
return true
elsif cmd.startsWithText("减")
num = Integer.parseInt(cmd.substringText(1))
total = cmd.getClientSession().getAttribute("total")
if total.nil?
cmd.getClientSession().setAttribute("total", JavaString.valueOf(num))
else
num_total = Integer.parseInt(total)
cmd.getClientSession().setAttribute("total", JavaString.valueOf(num_total - num))
end
return true
elsif cmd.startsWithText("合计")
total = cmd.getClientSession().getAttribute("total")
if total.nil?
getProjectContext().sendMovingMsg("合计为空")
else
getProjectContext().sendMovingMsg("合计:" + total)
cmd.getClientSession().clearAttribute("total")
end
return true
end
return false
end
}.new
ctx = ProjectContext::getProjectContext()
ctx.registerAssistant(myAssistant)
点击“Activate”按钮以应用本工程,
启动手机端并登录,
点击手机端首页菜单中的“语音”按钮,语音输入“加22”、“减16”......(注意:不要输入单数,如'减6',因为语音输入会实际输入'减六',而导致无法计算)。
语音输入“合计”,此时手机便会报出合计,并清空。
有关安装和打开设计器过程,请参阅用J2SE+CSS开发跨手机平台的云应用--附录-安装开发环境
了解更多API细节,请参阅onVoice方法;或在设计器中,将鼠标移至onVoice上,即可显示文档。
本文采用「保持署名—非商用」创意共享 4.0 许可证。 只要保持原作者署名和非商用,您可以自由地阅读、分享、修改本书。 详细的法律条文请参见创意共享网站。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。