语音识别
2015-11-07 21:43
218 查看
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
分别为:通过麦克风录音、联网、获取网络信息状态、获取wifi状态、改变网络状态如是否能联网、访问电话状态
在main.xml中添加一个EditText和一个Button,如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:gravity="top"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击开始说话" />
</LinearLayout>
然后在MainActivity中编写代码实现了
通过阅读讯飞给的文档,可以发现标准的识别控件是RecognizerDialog——是一个Dialog的子类,所以我们是可以在Activity中通过showDialog(int)方法来调用它的。
重写Activity的方法
[java] view plaincopyprint?
@Override
protected Dialog onCreateDialog(int id) {}
在其中创建并设置好一个RecognizerDialog即可。
创建RecognizerDialog方法为
RecognizerDialog recognizerDialog = new RecognizerDialog(
MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
![](http://my.csdn.net/uploads/201203/27/1332862973_6791.png)
然后需要设置识别参数
recognizerDialog.setEngine("sms", null, null);
第一个参数“sms”表示为请求的服务为“语音识别”。后两个参数暂时设为null就好。
官方文档:
![](http://my.csdn.net/uploads/201203/27/1332863126_4801.png)
最后还需给recognizerDialog设置一个listener,回调接口用以获取结果,
recognizerDialog.setListener(RecognizerDialogListener listener)的参数为RecognizerDialogListener接口,实现此接口要重写两个方法:onResults(ArrayList results,boolean isLast)和onEnd(SpeechError error)。用以获取和处理结果。
我的实现为直接写了一个匿名类:
[java] view plaincopyprint?
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList<RecognizerResult> results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
editText.setText(result.toString());
}
@Override
public void onEnd(SpeechError arg0) {
}
});
然后将此RecognizerDialog返回即可。
完整的MainActivity代码:
[java] view plaincopyprint?
import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechError;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;
public class MainActivity extends Activity {
EditText editText = null;
Button startButton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.editText);
startButton = (Button) findViewById(R.id.button_start);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog(1);
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
RecognizerDialog recognizerDialog = new RecognizerDialog(
MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
recognizerDialog.setEngine("sms", null, null);
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList<RecognizerResult> results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
editText.setText(result.toString());
}
@Override
public void onEnd(SpeechError arg0) {
}
});
return recognizerDialog;
}
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
分别为:通过麦克风录音、联网、获取网络信息状态、获取wifi状态、改变网络状态如是否能联网、访问电话状态
在main.xml中添加一个EditText和一个Button,如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:gravity="top"
android:inputType="textMultiLine" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击开始说话" />
</LinearLayout>
然后在MainActivity中编写代码实现了
通过阅读讯飞给的文档,可以发现标准的识别控件是RecognizerDialog——是一个Dialog的子类,所以我们是可以在Activity中通过showDialog(int)方法来调用它的。
重写Activity的方法
[java] view plaincopyprint?
@Override
protected Dialog onCreateDialog(int id) {}
在其中创建并设置好一个RecognizerDialog即可。
创建RecognizerDialog方法为
RecognizerDialog recognizerDialog = new RecognizerDialog(
MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
![](http://my.csdn.net/uploads/201203/27/1332862973_6791.png)
然后需要设置识别参数
recognizerDialog.setEngine("sms", null, null);
第一个参数“sms”表示为请求的服务为“语音识别”。后两个参数暂时设为null就好。
官方文档:
![](http://my.csdn.net/uploads/201203/27/1332863126_4801.png)
最后还需给recognizerDialog设置一个listener,回调接口用以获取结果,
recognizerDialog.setListener(RecognizerDialogListener listener)的参数为RecognizerDialogListener接口,实现此接口要重写两个方法:onResults(ArrayList results,boolean isLast)和onEnd(SpeechError error)。用以获取和处理结果。
我的实现为直接写了一个匿名类:
[java] view plaincopyprint?
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList<RecognizerResult> results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
editText.setText(result.toString());
}
@Override
public void onEnd(SpeechError arg0) {
}
});
然后将此RecognizerDialog返回即可。
完整的MainActivity代码:
[java] view plaincopyprint?
import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechError;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;
public class MainActivity extends Activity {
EditText editText = null;
Button startButton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.editText);
startButton = (Button) findViewById(R.id.button_start);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog(1);
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
RecognizerDialog recognizerDialog = new RecognizerDialog(
MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid
recognizerDialog.setEngine("sms", null, null);
recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList<RecognizerResult> results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
editText.setText(result.toString());
}
@Override
public void onEnd(SpeechError arg0) {
}
});
return recognizerDialog;
}
}
相关文章推荐
- 求生之路2升级补丁及完整版下载
- 数组的详细使用及冒泡排序方法
- hdu5534 Partial Tree 完全背包
- 计数排序
- C语言中#,##和#@
- jquery ajax 不能正常调用success的问题
- 测试csdn博客能否在移动端显示
- Android 百度地图SDK v_3_4_0学习笔记(一)环境搭建
- 内存管理高级
- SystemC分析(1)-基本数据类型的实现
- Ubuntu14.04 LTS更新源
- windows快捷键
- hdu 1.3.2 排名
- ios开发中MVC模式的理解
- 【转】ubuntu下pppoe后网络图标(无线网络)消失的解决办法
- SSH面试集锦——不看后悔哦!
- hdu--4435--charge-station+贪心
- 《Effective C++ 》学习笔记——条款02
- MP3播放器
- XML--做rss订阅