zoukankan      html  css  js  c++  java
  • 教你实现语音识别(基于科大讯飞)

    1),首先在官网下载相关jar包

    2)自定义界面设计:

    R.layout.activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dp" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="请先到餐厅预定选择店铺"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <ImageButton
                android:id="@+searchdialog/imageButton1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/transparent"
                android:padding="10dp"
                android:src="@android:drawable/ic_btn_speak_now" />
    
            <EditText
                android:id="@+searchdialog/editText1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:padding="10dp" >
    
                <requestFocus />
            </EditText>
        </LinearLayout>
    
    </LinearLayout>

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/content" />
    
    </LinearLayout>

    2) 逻辑实现

     首先添加相关jar包以及so文件,如下

    权限添加:

        <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.wangfubin.xunfenyuyin;
    
    
    
    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.app.AlertDialog;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private EditText setedit;
        private ImageButton yuyinButton;
        private Button button1;
        private String textString = "";
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.main);
            button1 = (Button)findViewById(R.id.button1);
            button1.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    LinearLayout LinearLayout1 = (LinearLayout) getLayoutInflater()
                            .inflate(R.layout.activity_main, null);
                    setedit = (EditText) LinearLayout1.findViewById(R.searchdialog.editText1);
                    yuyinButton = (ImageButton) LinearLayout1.findViewById(R.searchdialog.imageButton1);
                    new AlertDialog.Builder(MainActivity.this)
                    .setTitle("请输入查询关键字")
                    .setIcon(android.R.drawable.ic_dialog_info)
                    .setView(LinearLayout1)
                    .setPositiveButton("取消", null)
                    .setNegativeButton("确定",
                            new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0,
                                int arg1) {
                            /*// 数据获取
                            searchtext(setedit.getText().toString());*/
                            Toast.makeText(MainActivity.this, setedit.getText().toString(), Toast.LENGTH_LONG).show();
                        }
                    }).show();
                    yuyinButton.setOnClickListener(new OnClickListener() {
    
                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                            showDialog(1);
                        }
                    });
    
                }
            });
    
        }
        /**
         * 语音查询
         */
        @Override
        protected Dialog onCreateDialog(int id) {
            RecognizerDialog recognizerDialog = new RecognizerDialog(
                    MainActivity.this, "appid=5132fe14");// 这里应该写从科大讯飞申请到的appid
            recognizerDialog.setEngine("sms", null, null);
            recognizerDialog.setListener(new RecognizerDialogListener() {
                @Override
                public void onResults(ArrayList<RecognizerResult> results,
                        boolean arg1) {
                    for (int i = 0; i < results.size(); i++) {
                        textString += results.get(i).text;
                    }
                }
    
                @Override
                public void onEnd(SpeechError arg0) {
                    // Toast.makeText(MainActivity.this, textString, 1).show();
                    setedit.setText(textString.substring(0, textString.length() - 1));
    textString =""; } });
    return recognizerDialog; } }
  • 相关阅读:
    玩转渗透神器Kali:Kali Linux作为主系统使用的正确姿势TIPS
    知道创宇研发技能表v2.2
    我对什么都感兴趣,可我迷茫了(转载)
    防御性编程
    防御性编程技巧
    移动安全技术如何未雨绸缪?
    1054. 求平均值 (20)
    1053. 住房空置率 (20)
    1052. 卖个萌 (20)
    1051. 复数乘法 (15)
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/3424360.html
Copyright © 2011-2022 走看看