讯飞的语音sdk是需要申请的,地址是:http://open.voicecloud.cn/。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。
申请之后经过审核通过,会得到一个appid。
例子中,点击最下面的button可以开始说话,说完之后,屏幕中的TextView会显示刚才说过的话。
二、准备工作
首先当然是新建一个Android项目,然后按照文档说的添加库.
1.在Eclipse中 选 中 工 程 , 通 过 工 具 栏Project->Properties->Java BuildPath->Libraries->Add JARS 或 ADD External JARS 引入 Msc.jar;
2.将 SDK.\lib 目录下 libs 文件夹拷贝到工程根目录,确保.\libs\armeabi\libmsc.so 文件存在。
3.在工程 AndroidManifest.xml 文件中添加如下权限
<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"/>
三、主要代码:
- package com.example.meclisener;
- import java.util.ArrayList;
- import com.iflytek.speech.RecognizerResult;
- import com.iflytek.speech.SpeechError;
- import com.iflytek.ui.RecognizerDialog;
- import com.iflytek.ui.RecognizerDialogListener;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity implements RecognizerDialogListener {
- private RecognizerDialog isrDialog;
- private TextView myTextView;
- private String text;
- private Button myButton;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- myTextView=(TextView)findViewById(R.id.myTextView);
- myButton=(Button)findViewById(R.id.StartButton);
- myButton.setOnClickListener(new ButtonListener());
- }
- @Override
- protected void onStart() {
- super.onStart();
- text="";
- //appid 需要自己去申请
- isrDialog = new RecognizerDialog(this,"appid=XXXXXXXX");
- isrDialog.setEngine("sms",null,null);
- isrDialog.setListener(this);
- }
- @Override
- public void onResults(ArrayList<RecognizerResult> results,boolean
- isLast){
- text += results.get(0).text;
- System.out.println("OnResult");
- Toast.makeText(getApplicationContext(),"You say"+text,Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onEnd(SpeechError error) {
- if(error != null)
- System.out.println("Error");
- myTextView.setText(text);
- }
- public void showisrDialog()
- {
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- class ButtonListener implements OnClickListener
- {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- isrDialog.show();
- }
- }
- }
布局文件
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- a
- <TextView
- android:id="@+id/myTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:layout_marginTop="20dp"
- android:text="@string/hello_world"
- android:textSize="20dp"
- tools:context=".MainActivity" />
- <LinearLayout
- android:id="@+id/bottom"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:orientation="horizontal" >
- <Button
- android:id="@+id/StartButton"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
- android:layout_weight="1"
- android:text="Speak"/>
- </LinearLayout>
- </RelativeLayout>