您的位置:首页 > 其它

语音识别

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



然后需要设置识别参数

recognizerDialog.setEngine("sms", null, null);

第一个参数“sms”表示为请求的服务为“语音识别”。后两个参数暂时设为null就好。

官方文档:



最后还需给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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: