1.) Create a new project by File-> New -> Android Project name it VoiceRecognitionActivity.
2.) Write following into main.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <EditText android:id= "@+id/etTextHint" android:gravity= "top" android:inputType= "textMultiLine" android:lines= "1" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:text= "@string/etSearchHint" /> <Button android:id= "@+id/btSpeak" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:onClick= "speak" android:padding= "@dimen/padding_medium" android:text= "@string/btSpeak" tools:context= ".VoiceRecognitionActivity" /> <Spinner android:id= "@+id/sNoOfMatches" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:entries= "@array/saNoOfMatches" android:prompt= "@string/sNoOfMatches" /> <TextView android:layout_width= "match_parent" android:layout_height= "wrap_content" android:text= "@string/tvTextMatches" android:textStyle= "bold" /> <ListView android:id= "@+id/lvTextMatches" android:layout_width= "match_parent" android:layout_height= "wrap_content" /> </LinearLayout> |
3.) Write following into strings.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <?xml version= "1.0" encoding= "utf-8" ?> <resources> <string name= "app_name" >VoiceRecognitionActivity</string> <string name= "hello_world" >Hello world!</string> <string name= "menu_settings" >Settings</string> <string name= "btSpeak" >Speak</string> <string name= "tvTextMatches" >Text Matches</string> <string name= "sNoOfMatches" >No of Matches</string> <string name= "etSearchHint" >Speech hint here</string> <string-array name= "saNoOfMatches" > <item> 1 </item> <item> 2 </item> <item> 3 </item> <item> 4 </item> <item> 5 </item> <item> 6 </item> <item> 7 </item> <item> 8 </item> <item> 9 </item> <item> 10 </item> </string-array> </resources> |
4.) Create and write following into values/dimens.xml:
1
2
3
4
5
6
7
| <resources> <dimen name= "padding_small" >8dp</dimen> <dimen name= "padding_medium" >8dp</dimen> <dimen name= "padding_large" >16dp</dimen> </resources> |
5.) Write following into manifest file:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <?xml version= "1.0" encoding= "utf-8" ?> <manifest xmlns:android= "http://schemas.android.com/apk/res/android" package = "com.example.voicerecognitionactivity" android:versionCode= "1" android:versionName= "1.0" > <uses-sdk android:minSdkVersion= "16" android:targetSdkVersion= "16" /> <uses-permission android:name= "android.permission.INTERNET" /> <application android:allowBackup= "true" android:icon= "@drawable/ic_launcher" android:label= "@string/app_name" android:theme= "@style/AppTheme" > <activity android:name= "com.example.voicerecognitionactivity.VoiceRecognitionActivity" android:label= "@string/app_name" > <intent-filter> <action android:name= "android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
6.) Run for output.
Steps:
1.) Create a project named VoiceRecognitionActivity and set the information as stated in the image.
Build Target: Android 4.0
Application Name: VoiceRecognitionActivity
Package Name: com. example. VoiceRecognitionActivity
Activity Name: VoiceRecognitionActivity
Min SDK Version: 4.0
Application Name: VoiceRecognitionActivity
Package Name: com. example. VoiceRecognitionActivity
Activity Name: VoiceRecognitionActivity
Min SDK Version: 4.0
2.) Open VoiceRecognitionActivity.java file and write following code there:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
| package com.example.voicerecognitionactivity; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.SearchManager; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.Toast; public class VoiceRecognitionActivity extends Activity { private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001 ; private EditText metTextHint; private ListView mlvTextMatches; private Spinner msTextMatches; private Button mbtSpeak; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); metTextHint = (EditText) findViewById(R.id.etTextHint); mlvTextMatches = (ListView) findViewById(R.id.lvTextMatches); msTextMatches = (Spinner) findViewById(R.id.sNoOfMatches); mbtSpeak = (Button) findViewById(R.id.btSpeak); } public void checkVoiceRecognition() { // Check if voice recognition is present PackageManager pm = getPackageManager(); List<ResolveInfo> activities = pm.queryIntentActivities( new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0 ); if (activities.size() == 0 ) { mbtSpeak.setEnabled( false ); Toast.makeText( this , "Voice recognizer not present" , Toast.LENGTH_SHORT).show(); } } public void speak(View view) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // Specify the calling package to identify your application intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass() .getPackage().getName()); // Display an hint to the user about what he should say. intent.putExtra(RecognizerIntent.EXTRA_PROMPT, metTextHint.getText() .toString()); // Given an hint to the recognizer about what the user is going to say intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); // If number of Matches is not selected then return show toast message if (msTextMatches.getSelectedItemPosition() == AdapterView.INVALID_POSITION) { Toast.makeText( this , "Please select No. of Matches from spinner" , Toast.LENGTH_SHORT).show(); return ; } int noOfMatches = Integer.parseInt(msTextMatches.getSelectedItem() .toString()); // Specify how many results you want to receive. The results will be // sorted where the first result is the one with higher confidence. intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, noOfMatches); startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); } @Override protected void onActivityResult( int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) //If Voice recognition is successful then it returns RESULT_OK if (resultCode == RESULT_OK) { ArrayList<String> textMatchList = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (!textMatchList.isEmpty()) { // If first Match contains the 'search' word // Then start web search. if (textMatchList.get( 0 ).contains( "search" )) { String searchQuery = textMatchList.get( 0 ).replace( "search" , " " ); Intent search = new Intent(Intent.ACTION_WEB_SEARCH); search.putExtra(SearchManager.QUERY, searchQuery); startActivity(search); } else { // populate the Matches mlvTextMatches .setAdapter( new ArrayAdapter<String>( this , android.R.layout.simple_list_item_1, textMatchList)); } } //Result code for various error. } else if (resultCode == RecognizerIntent.RESULT_AUDIO_ERROR){ showToastMessage( "Audio Error" ); } else if (resultCode == RecognizerIntent.RESULT_CLIENT_ERROR){ showToastMessage( "Client Error" ); } else if (resultCode == RecognizerIntent.RESULT_NETWORK_ERROR){ showToastMessage( "Network Error" ); } else if (resultCode == RecognizerIntent.RESULT_NO_MATCH){ showToastMessage( "No Match" ); } else if (resultCode == RecognizerIntent.RESULT_SERVER_ERROR){ showToastMessage( "Server Error" ); } super .onActivityResult(requestCode, resultCode, data); } void showToastMessage(String message){ Toast.makeText( this , message, Toast.LENGTH_SHORT).show(); } } |
3.) Compile and build the project.
Output