对于android 智能家居项目,如果能实现语音控制,无疑会丰富项目功能,改善用户体验,android语音识别的方法有三种:一是使用intent调用语音识别程序,二 是应用程序自己调用语音识别库,三是使用service调用语音识别程序,本文重点介绍第一种方法,一言以蔽之,其主要原理就是将语音发送到google 云端,然后云端处理,匹配数据,再发送给客户端。

1、需要通过intent传递语音识别的模式:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);需要开启一个语音活动;

2、intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);这是对语音模式和自由形式的语音识别;

3、提示用户开始输入语音:

intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");

4、开始语音识别:

startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);

这里调用startActivityForResult方法,这种方法可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得请求Activity结束之后的操作。

用户在输入语音数据之后,就是用上述方法获取经google云端处理的语音数据:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                // TODO Auto-generated method stub
                // 回调获取从谷歌得到的数据
                if (requestCode == VOICE_RECOGNITION_REQUEST_CODE
                && resultCode == RESULT_OK) {
                        // 取得语音的字符
                        ArrayList<String> results = data

.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);其中参数RecognizerIntent.EXTRA_RESULTS 的作用就是将字符串返回到一个

ArrayList<String> 的对象中
        for (int i = 0; i < results.size(); i++) {
                resultString += results.get(i);
        }

这段代码的作用就是遍历数组,获取语音字符串;

下面是语音控制打开M0开发板上led灯的程序:

if ((resultString.indexOf("开") > -1)
        | (resultString.indexOf("打") > -1)) {
                if (resultString.indexOf("灯") > -1) {

if (nodeInfo.getLed() == 0) {
                                btn_light.setImageResource(R.drawable.light_on);
                                s = "正在打开电灯";
                                Toast toast = Toast.makeText(getApplicationContext(),
                                s, Toast.LENGTH_SHORT);
                                toast.show();
                                nodeInfo.setLed(1);
                                if (!writeThreadIsCreated) {
                                        WriteThread = new WriteThread();
                                        WriteThread.begin(nodeInfo.getDevNum(),
                                        Cmd.DevCmd.LEDON);
                                } else
                                WriteThread.begin(nodeInfo.getDevNum(),
                                Cmd.DevCmd.LEDON);
                        }

}

以下是语音控制打开M0开发板上风扇的程序:

if (resultString.indexOf("风扇") > -1) {
                s = "正在打开风扇";

Toast.makeText(this, s, 1).show();

if (nodeInfo.getFun() == 0) {

btn_fan.setImageResource(R.drawable.fan_on);

nodeInfo.setFun(1);
                        if (!writeThreadIsCreated) {
                                WriteThread = new WriteThread();
                                WriteThread.begin(nodeInfo.getDevNum(),
                                Cmd.DevCmd.FANON);
                        } else {
                                WriteThread.begin(nodeInfo.getDevNum(),
                                Cmd.DevCmd.FANON);
                        }
                }

}

以下是语音控制打开M0开发板上蜂鸣器的程序

if ((resultString.indexOf("蜂") > -1)
        | (resultString.indexOf("鸣") > -1)) {
                if (nodeInfo.getBeep() == 0) {
                        btn_beep.setImageResource(R.drawable.beep_on);
                        s = "正在打开蜂鸣器";
                        // toast delay 3
                        Toast toast = Toast.makeText(getApplicationContext(),
                        s, Toast.LENGTH_SHORT);
                        // toast show
                        toast.show();

nodeInfo.setBeep(1);
                        if (!writeThreadIsCreated) {
                                WriteThread = new WriteThread();
                                WriteThread.begin(nodeInfo.getDevNum(),
                                Cmd.DevCmd.SPKON);
                        } else
                        WriteThread.begin(nodeInfo.getDevNum(),
                        Cmd.DevCmd.SPKON);
                }
        }

以下是语音控制打开M0开发板上数码管的程序

if (resultString.indexOf("数") > -1) {

if (nodeInfo.getNixietub() == 0) {
                        btn_ne.setImageResource(R.drawable.seg_on);
                        s = "打开数码管";
                        // 弹窗显示延时3秒
                        Toast toast = Toast.makeText(getApplicationContext(),
                        s, Toast.LENGTH_SHORT);
                        // 显示toast信息
                        toast.show();
                        nodeInfo.setNixietub(1);
                        if (!writeThreadIsCreated) {
                                WriteThread = new WriteThread();
                                WriteThread.begin(nodeInfo.getDevNum(),
                                Cmd.DevCmd.NTON);
                        } else
                        WriteThread.begin(nodeInfo.getDevNum(),
                        Cmd.DevCmd.NTON);
                }
        }

android智能家居在线语音控制的更多相关文章

  1. Arduino系列之智能家居蓝牙语音遥控灯(四)

    用到的材料 Arduino uno hc-05   蓝牙模块 安卓手机 安卓APP AMR—voice 通过安卓手机连接Arduino的蓝牙模块Hc-05,通过语音识别软件AMR-voice识别语音, ...

  2. 实例源码--Android智能家居系统源码

      下载源码   技术要点:  1.Android应 用开发基础框架 2.SQLITE数据库的 使用 3.网络通信 4.GOOGLE地图模块 5.源码带有非常详 细的中文注释 ...... 详细介绍: ...

  3. 入门智能家居,从 IFTTT 到 HomeKit 自动化(二)

    入门智能家居,从 IFTTT 到 HomeKit 自动化(二)   目录 0. HomeKit.HomeBridge.HomeAssistant 分别是什么?关系是什么? 1. 开始前的准备 2. 整 ...

  4. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  5. 使用Olami SDK 语音控制一个支持HomeKit的智能家居的iOS程序

    前言 HomeKit是苹果发布的智能家居平台.通过HomeKit组件,用户可以通过iphone.iPad和ipod Touch来控制智能灯泡,风扇.空调等支持HomeKit的智能家居,尤其是可以通过S ...

  6. Diy智能家居-1.基于esp8266的语音控制系统(开篇)

    目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...

  7. 智能家居-3.基于esp8266的语音控制系统(软件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

  8. 智能家居-1.基于esp8266的语音控制系统(开篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) apache-apollo安 ...

  9. 智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电

    转载:智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电 前面我写了一个系列共三篇的智能家居实践,用的是 Amazon Echo 实现语音控制,但是 Amazon Echo ...

随机推荐

  1. 笨方法学python 33课

    今天Eiffel看到了第33章,任务是把一个while循环改成一个函数. 我在把while循环改成函数上很顺利,但是不知道怎么写python的主函数,在参数的调用上也出现了问题. 通过查资料,发现py ...

  2. LocalContainerEntityManagerFactoryBean

    http://doc.okbase.net/liuyitian/archive/109276.html

  3. Memcache仅仅支持简单数据类型

    Memcache仅仅支持简单数据类型 ,复杂数据类型需要应用自己处理 从数据库当中取出数据[User [id=1, username=guowuxin, password=guowuxin], Use ...

  4. WebService积累

    1.缺点,无法传输复杂对象:如无法序列化key/value结构的类型参数以及相关一维集合接口(Hashtable等打上标签[Serializable]即可序列化,不过继承的IDictionary并不可 ...

  5. 关于 Java 性能监控您不知道的 5 件事,第 1 部分

    责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java? 应用程序速度,猜测也不能帮您解决.Ted Neward 引导您关注 Java 性能监控工具,从5 个技巧开始,使用Java 5 ...

  6. Linux PS 命令详解

    Linux操作系统PS命令详细解析 要对系统中进程进行监测控制,用 ps 命令满足你. /bin/ps ps 是显示瞬间行程的状态,并不动态连续:如果想对进程运行时间监控,应该用 top 工具. ki ...

  7. Java异常处理之try-catch-finally

    /** * @author Administrator * 功能:异常 */ package com.test; import java.io.*; import java.net.*; public ...

  8. Java 数组倒序

    String s[] = {,,,,,,}; ; i < s.length; i ++){ System.-i] +","); }

  9. VIM 及其插件使用快捷键汇总

    我的博客:www.while0.com vim搜索取消高亮 :nohl

  10. 【原创】FPGA开发手记(三) PS/2键盘

    以下内容均以Xilinx的Nexys3作为开发板   1.PS/2键盘简介 虽然Nexys3开发板是利用USB接口搭载键盘,但是其原理与PS/2键盘完全相同,现在就仅以PS/2键盘为例讲解如何将键盘搭 ...