简体   繁体   English

在android中的语音识别后,文本不会在editText上打印

[英]Text doesn't get printed on editText after Voice Recognition in android

On running, the Voice Recognition intent starts, but it does not print anything on to the EditText 在运行时,语音识别意图启动,但它不会在EditText上打印任何内容

Below is the code: 以下是代码:

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.speech.RecognizerIntent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class dialog1cl extends AppCompatActivity {
 public EditText ed;
    private static final int av= 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog1);
        ed=(EditText)findViewById(R.id.editText);
        ImageButton im=(ImageButton)findViewById(R.id.imageButton);
        im.setOnClickListener(new View.OnClickListener(){
            public void onClick(View view){

                promptspeech();
            }
        });

    }
   public void promptspeech()
    {
        Intent i=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
        i.putExtra(RecognizerIntent.EXTRA_PROMPT,"Say Something!");

        try {
            startActivityForResult(i,av );
        }
        catch(ActivityNotFoundException a)
        {
            Toast.makeText(dialog1cl.this,"Sorry! Your device doesnt support speech Language",Toast.LENGTH_LONG).show();
        }
    }

    public void onActivityResult(int request_code , int result_code, Intent i){



             if(request_code ==av && result_code==RESULT_OK)
             {
                List<String> result=i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
ed.setText(result.get(0));
            }
        super.onActivityResult(request_code, result_code, i);

    }
}

XML code: XML代码:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:weightSum="1"

    android:id="@+id/lin1">
    <ImageView

        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:scaleType="center"
        android:background="#FFFFBB32"
        android:contentDescription="PARAMETERS" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="34dp"
        android:textSize="20dp"
        android:textStyle="bold"
        android:textColor = "@color/blue1"
        android:text="Task Name?"
        android:id="@+id/textView2"
        android:layout_gravity="center_horizontal" />

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Enter your Task"
            android:ems="10"
            android:id="@+id/editText" />

        <ImageButton
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@color/white"
            android:id="@+id/imageButton"
            android:src="@drawable/ic_action_voice"
            android:layout_column="22" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="match_parent"
            android:layout_height="34dp"
            android:textSize="20dp"
            android:textStyle="bold"
            android:textColor = "@color/blue1"
            android:text="DeadLine?"
            android:id="@+id/textView3"
            android:layout_column="0" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:inputType="textPersonName"
            android:hint="Name"
            android:ems="10"
            android:id="@+id/editText2"
            android:layout_column="0"
            android:focusable="false"/>

        <ImageButton
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/ic_action_calendar"
            android:background="@color/white"
            android:id="@+id/imageButton2"

            android:layout_column="22" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView

            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="match_parent"
            android:layout_height="34dp"
            android:textSize="20dp"
            android:textStyle="bold"
            android:textColor = "@color/blue1"
            android:text="Time?"
            android:id="@+id/textView4"
            android:layout_column="0" />
    </TableRow>

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:inputType="textPersonName"
            android:text="Name"
            android:ems="10"
            android:id="@+id/editText3"
            android:layout_column="0" />

        <ImageButton
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/ic_action_time"
            android:background="@color/white"
            android:id="@+id/imageButton3"

            android:layout_column="22" />
    </TableRow>


</TableLayout>

change you on activity results with this, you have to programatically set text to your edit text 通过此更改活动结果,您必须以编程方式将文本设置为编辑文本

public void onActivityResult(int request_code , int result_code, Intent i){
         if(request_code ==av && result_code==RESULT_OK)
         {
            List<String> result=i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                ed.setText(result.get(0));
        }
    super.onActivityResult(request_code, result_code, i);

}

Using this official tutorial I got it working for an actionbar. 使用这个官方教程我得到了一个动作栏。 Take extra care while creating the searchable and meta-data. 在创建可搜索和元数据时要格外小心。 https://developer.android.com/training/search/setup.html https://developer.android.com/training/search/setup.html

If you want the results of the text within the same activity, point the Search Intent Filter to your current activity and make that activity singleInstance or singleTop . 如果您希望在同一活动中显示文本结果,请将Search Intent Filter指向当前活动,并将该活动singleTop singleInstancesingleTop

嘿,我为这样的错误道歉..但是我意识到代码是正确的,但我在xml文件中为表格布局做了我的背景白色,因此无法意识到它已经在编辑文本上打印了.. ..Ofcourse一个罕见的错误...希望它帮助那里的人..上面的代码适用于语音识别...从xml中排除以下部分:

background:"@colors/white"

You need to take the result that you get from the activity and set the EditText's text to equal it. 您需要获取从活动中获得的结果并将EditText的文本设置为等于它。

List<String> result=i.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String text = getTextFromResult(result);
ed.setText(text);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM