Skip to content
This repository was archived by the owner on Feb 25, 2022. It is now read-only.

Commit 7d519f2

Browse files
author
Hisanobu Tomari
committed
Add speech recognition
1 parent bfbfbc0 commit 7d519f2

File tree

8 files changed

+77
-8
lines changed

8 files changed

+77
-8
lines changed

res/drawable-hdpi/action_mic.png

1.59 KB
Loading

res/drawable-mdpi/action_mic.png

1.29 KB
Loading

res/drawable-xhdpi/action_mic.png

1.83 KB
Loading

res/menu-v11/main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
<menu xmlns:android="http://schemas.android.com/apk/res/android">
2+
<item
3+
android:id="@+id/action_mic"
4+
android:orderInCategory="90"
5+
android:showAsAction="always"
6+
android:title="@string/action_mic"
7+
android:icon="@drawable/action_mic" />
28
<item
39
android:id="@+id/action_settings"
410
android:orderInCategory="100"

res/menu-v14/main.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@
44
android:showAsAction="ifRoom"
55
android:title="@string/action_share"
66
android:actionProviderClass="android.widget.ShareActionProvider" />
7-
<item
7+
<item
8+
android:id="@+id/action_mic"
9+
android:orderInCategory="90"
10+
android:showAsAction="always"
11+
android:title="@string/action_mic"
12+
android:icon="@drawable/action_mic" />
13+
<item
814
android:id="@+id/action_settings"
915
android:orderInCategory="100"
1016
android:showAsAction="ifRoom"

res/menu/main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
<menu xmlns:android="http://schemas.android.com/apk/res/android">
2+
<item
3+
android:id="@+id/action_mic"
4+
android:orderInCategory="90"
5+
android:showAsAction="always"
6+
android:title="@string/action_mic"
7+
android:icon="@android:drawable/ic_btn_speak_now" />
28
<item
39
android:id="@+id/action_settings"
410
android:orderInCategory="100"

res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<string name="app_name">ジャバボタン</string>
55
<string name="action_settings">設定</string>
66
<string name="action_share">Share</string>
7+
<string name="action_mic">音声認識</string>
78
<string name="java_message">ジャバ</string>
89
<string name="settings_title">設定</string>
910
<string name="dl_free_java">無料Javaのダウンロード</string>

src/com/example/javabutton/MainActivity.java

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
package com.example.javabutton;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
36
import android.hardware.Sensor;
47
import android.hardware.SensorEvent;
58
import android.hardware.SensorEventListener;
69
import android.hardware.SensorManager;
710
import android.os.Build;
811
import android.os.Bundle;
912
import android.preference.PreferenceManager;
13+
import android.speech.RecognizerIntent;
1014
import android.annotation.TargetApi;
1115
import android.app.Activity;
1216
import android.content.Intent;
1317
import android.content.SharedPreferences;
1418
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
19+
import android.content.pm.ResolveInfo;
1520
import android.view.GestureDetector;
1621
import android.view.KeyEvent;
1722
import android.view.Menu;
1823
import android.view.MenuItem;
1924
import android.view.MotionEvent;
2025
import android.view.View;
2126
import android.widget.ShareActionProvider;
27+
import android.widget.Toast;
2228
//import android.widget.Toast;
2329
import android.media.AudioManager;
2430
import android.media.SoundPool;
@@ -109,14 +115,29 @@ protected void onDestroy() {
109115
super.onDestroy();
110116
javaPool.release();
111117
}
112-
118+
private boolean isSpeechRecognizerAvailable() {
119+
try {
120+
Intent recognitionIntent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
121+
List<ResolveInfo> activities=getPackageManager().queryIntentActivities(recognitionIntent, 0);
122+
if(activities.size()>0) {
123+
return true;
124+
}
125+
} catch (Exception e) {
126+
return false;
127+
}
128+
return false;
129+
}
113130
@Override
114131
public boolean onCreateOptionsMenu(Menu menu) {
115132
// Inflate the menu; this adds items to the action bar if it is present.
116133
getMenuInflater().inflate(R.menu.main, menu);
117134
if(Build.VERSION.SDK_INT>=14) {
118135
setupShareAction(menu);
119136
}
137+
if(!isSpeechRecognizerAvailable()) {
138+
MenuItem micAction=menu.findItem(R.id.action_mic);
139+
micAction.setVisible(false);
140+
}
120141
return true;
121142
}
122143

@@ -141,12 +162,15 @@ public boolean onMenuItemSelected(int featureId, MenuItem item) {
141162
if(itemId==R.id.action_settings) {
142163
Intent intent=new Intent(this,SettingsActivity.class);
143164
startActivity(intent);
144-
return true;
145-
}
146-
return super.onMenuItemSelected(featureId,item);
147-
}
148-
149-
public void JavaButtonClick(View v) {
165+
} else if(itemId==R.id.action_mic) {
166+
startSpeechRecognition();
167+
} else {
168+
return super.onMenuItemSelected(featureId,item);
169+
}
170+
return true;
171+
}
172+
173+
public void JavaButtonClick(View v) {
150174
playJava(1.f);
151175
}
152176

@@ -217,4 +241,30 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {
217241
}
218242
return super.onKeyDown(keyCode, event);
219243
}
244+
private static final int VOICE_RECOGNITION_REQUEST_CODE=0x06a103;
245+
private void startSpeechRecognition() {
246+
Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
247+
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
248+
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
249+
startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
250+
}
251+
@Override
252+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
253+
if(requestCode==VOICE_RECOGNITION_REQUEST_CODE && resultCode==RESULT_OK) {
254+
ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
255+
if(matches.size()>0) {
256+
try {
257+
String javaStr=matches.get(0).toLowerCase(java.util.Locale.US);
258+
if("java".equals(javaStr)) {
259+
playJava(1.f);
260+
} else {
261+
Toast.makeText(this, javaStr, Toast.LENGTH_SHORT).show();
262+
}
263+
} catch (NullPointerException e) {
264+
}
265+
}
266+
return;
267+
}
268+
super.onActivityResult(requestCode, resultCode, data);
269+
}
220270
}

0 commit comments

Comments
 (0)