基于PocketSpinxAndroiDemo和javadrone api实现ARDrone语音控制
2014-07-30 21:45
603 查看
首先需要调通Android离线语音识别demo工程PocketSpinxAndroiDemo,在该工程的基础上使用javadrone
api实现ARDrone语音控制。
第一步,修改布局文件main.xml,在其中增加一个Button和一个TextView,分别用来实现连接ARDrone和显示ARDrone电池信息。
然后,修改AndroidManifest.xml文件,在该文件下方加上wifi获取、sdcard读写等权限获取的语句,例如,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
这些权限获取语句和笔记“基于javadrone api实现ARDrone Android控制”(该笔记修改后的工程文件夹是ARDrone-on-Android)中的基本一样。
最后,需要修改源代码。将javadrone api中ardrone、ardrone/comands、ardrone/video几个库拷贝到/src/com/comcodeminders下(或者直接从ARDrone-on-Android工程中拷贝过来);将ARDrone-on-Android/src/com/profusiongames/MathUtil.java拷贝到PocketSpinxAndroiDemo/src/edu/cmu/pocketsphinx/demo下,接下来,修改PocketSpinxAndroiDemo中的PocketSpinxDemo.java文件,主要修改如下,
1. 添加main.xml中增加的Button的响应,该响应涉及Android SDK的SensorEventListener的重载,以及任务同步等,从而连接ARDrone。
2. 给PocketSpinxAndroiDemo中用来显示语音识别结果的EditText控件添加TextWatcher。TextWatcher中每次语音识别结果出来时,对飞机做相应控制。
3. 添加main.xml中增加的TextView的响应,该响应要重载javadrone api中NavDataListener,从而显示ARDrone的电池信息。
其中,1和3可以参考笔记“基于javadrone api实现ARDrone Android控制”,2则可以参考笔记“【转】Android EditText控件事件监听”。
总的来说,修改后的PocketSpinxDemo.java相当于修改前的该文件和ARDrone-on-Android/src/com/profusiongames/FusionDrone.java的合并,只是修改后对飞机的控制不再通过按钮来控制,而是通过监听EditText控件(该控件用来显示语音识别的结果)来实现。
下面说说修改过程中的注意点。
首先一点是,由于是在他人工程上修改,所以该工程的app名、java程序的类名什么的都不要动,免得后面app运行时出现"Unfortunately,xxx
has stopped!"等坑爹错误,这很可能就是因为找不到activity造成的,而activity是因为类名被你改动过而找不到的!
然后,Java下的字符串比较和C/C++下是不一样的。Java中,==比较两个String对象的指向的内存地址是否相等,要比较两个String对象的值是否相等,需要用equals方法,比如a.equals(b)。
参考:
笔记“基于javadrone api实现ARDrone Android控制”
笔记“【转】Android EditText控件事件监听”
http://blog.sina.com.cn/s/blog_4ef2568301014xmd.html(Java字符串比较)
http://www.cnblogs.com/killerlegend/p/3237522.html(app运行错误"Unfortunately,xxx has stopped!"原因解析)
api实现ARDrone语音控制。
第一步,修改布局文件main.xml,在其中增加一个Button和一个TextView,分别用来实现连接ARDrone和显示ARDrone电池信息。
然后,修改AndroidManifest.xml文件,在该文件下方加上wifi获取、sdcard读写等权限获取的语句,例如,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
这些权限获取语句和笔记“基于javadrone api实现ARDrone Android控制”(该笔记修改后的工程文件夹是ARDrone-on-Android)中的基本一样。
最后,需要修改源代码。将javadrone api中ardrone、ardrone/comands、ardrone/video几个库拷贝到/src/com/comcodeminders下(或者直接从ARDrone-on-Android工程中拷贝过来);将ARDrone-on-Android/src/com/profusiongames/MathUtil.java拷贝到PocketSpinxAndroiDemo/src/edu/cmu/pocketsphinx/demo下,接下来,修改PocketSpinxAndroiDemo中的PocketSpinxDemo.java文件,主要修改如下,
1. 添加main.xml中增加的Button的响应,该响应涉及Android SDK的SensorEventListener的重载,以及任务同步等,从而连接ARDrone。
2. 给PocketSpinxAndroiDemo中用来显示语音识别结果的EditText控件添加TextWatcher。TextWatcher中每次语音识别结果出来时,对飞机做相应控制。
3. 添加main.xml中增加的TextView的响应,该响应要重载javadrone api中NavDataListener,从而显示ARDrone的电池信息。
其中,1和3可以参考笔记“基于javadrone api实现ARDrone Android控制”,2则可以参考笔记“【转】Android EditText控件事件监听”。
总的来说,修改后的PocketSpinxDemo.java相当于修改前的该文件和ARDrone-on-Android/src/com/profusiongames/FusionDrone.java的合并,只是修改后对飞机的控制不再通过按钮来控制,而是通过监听EditText控件(该控件用来显示语音识别的结果)来实现。
下面说说修改过程中的注意点。
首先一点是,由于是在他人工程上修改,所以该工程的app名、java程序的类名什么的都不要动,免得后面app运行时出现"Unfortunately,xxx
has stopped!"等坑爹错误,这很可能就是因为找不到activity造成的,而activity是因为类名被你改动过而找不到的!
然后,Java下的字符串比较和C/C++下是不一样的。Java中,==比较两个String对象的指向的内存地址是否相等,要比较两个String对象的值是否相等,需要用equals方法,比如a.equals(b)。
参考:
笔记“基于javadrone api实现ARDrone Android控制”
笔记“【转】Android EditText控件事件监听”
http://blog.sina.com.cn/s/blog_4ef2568301014xmd.html(Java字符串比较)
http://www.cnblogs.com/killerlegend/p/3237522.html(app运行错误"Unfortunately,xxx has stopped!"原因解析)
相关文章推荐
- 基于Kinect for Windows SDK beta开发语音命令,实现语音控制游戏
- [置顶] Android下通过pocketsphinx实现离线语音识别的环境搭建和demo运行
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详
- Java / Android 基于Http的多线程下载的实现
- Java / Android 基于Http的多线程下载的实现
- Android下通过pocketsphinx实现离线语音识别的环境搭建和demo运行
- 只需java编程,就可实现工业自动化控制的Android工业平板电脑开发
- Java / Android 基于Http的多线程下载的实现
- 基于java语言的给cube添加custom view来实现权限控制
- Android基于WebView的Java和JS相互调用实现步骤,附带精简可行的DEMO
- Android下通过pocketsphinx实现离线语音识别的环境搭建和demo运行(续)--实现Windows下的语音识别
- 基于Google的嵌入式系统android开发语音技术(语音搜索,语音朗读文章,语音控制)
- 基于javadrone api实现ARDrone Android控制
- android上实现语音识别,基于google的语音识的简单例子.
- Java / Android 基于Http的多线程下载的实现
- Android简单语音控制应用的实现
- Java / Android 基于Http的多线程下载的实现
- Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理
- Android基于mAppWidget实现手绘地图(十五)–如何控制放大缩小
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解