استفاده از جستجوی صوتی در اندروید

یکشنبه 15 آذر 1394

در این مقاله قصد داریم در مورد جستجوی صوتی صحبت نماییم، در بعضی از گوشی ها شاید دیده باشید که با صحبت کردن کاربر کلمه ی مورد نظر را تشخیص می دهد و داخل Textview متن را تایپ می نماید.

استفاده از جستجوی صوتی در اندروید

مرحله به مرحله پیش می رویم قدم اول درست کردن لایه ی activity ما است به صورت زیر:

<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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="132dp"
        android:text="..." />

    <ImageButton
        android:id="@+id/button1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text1"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dp"
        android:layout_marginTop="37dp"
        android:src="@android:drawable/ic_btn_speak_now" />

</RelativeLayout>

از یک textview و یک button استفاده می نماییم که با فشار دادن دکمه صدا را دریافت کرده است و متن مورد نظر را تایپ می نماید.

برای این نمونه هم باید کتابخانه android-support-v4 را به پروژه ی خود اضافه نمایید.

برای کلاس جاوا از کلاس Activity ارث می برد .از یک متغییر استاتیک و final استفاده می کنیم به اسم request_Ok که این متغییر همان کلمه ای است که داخل Textview ما تایپ خواهد شد.

یک intent تعریف می کنیم که داخل این Intent کلمه ی ای قرار است تایپ شود را می گیرد داخل دستور try چک می شود که اگر درست بود آن کلمه را تایپ نماید و اگر درست نبود پیغام خطا را ارسال نماید.

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	protected static final int REQUEST_OK = 1;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		 Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
         i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
         try {
             startActivityForResult(i, REQUEST_OK);
         } catch (Exception e) {
        	 Toast.makeText(this, "خطا", Toast.LENGTH_LONG).show();
         }
	}

حالا در متد دوم از 3 متغییر استفاده کرده، 3 متغییر صحیح که برای چک کردن استفاده می شود، اگر آن متغییر استاتیک که بالا تعریف کرده ایم با دو متغییر صحیح برابر بود حالا زمان این رسیده است که با استفاده از یک آرایه رشته ای آن متغییر را داخل textview تایپ نماید یا به عبارتی set نماید.

	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==REQUEST_OK  && resultCode==RESULT_OK) {
        	ArrayList<String> thingsYouSaid = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        	((TextView)findViewById(R.id.text1)).setText(thingsYouSaid.get(0));
        }
    }

کل کد کلاس جاوا به صورت زیر است:

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	protected static final int REQUEST_OK = 1;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.button1).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		 Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
         i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
         try {
             startActivityForResult(i, REQUEST_OK);
         } catch (Exception e) {
        	 Toast.makeText(this, "خطا", Toast.LENGTH_LONG).show();
         }
	}
	
	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==REQUEST_OK  && resultCode==RESULT_OK) {
        	ArrayList<String> thingsYouSaid = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        	((TextView)findViewById(R.id.text1)).setText(thingsYouSaid.get(0));
        }
    }

}

در نهایت خروجی کار به صورت زیر است:

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید