13 package ai.picovoice.porcupine.sttdemo;
16 import android.Manifest;
17 import android.content.Intent;
18 import android.content.pm.PackageManager;
19 import android.graphics.Color;
20 import android.os.Bundle;
21 import android.os.Handler;
22 import android.os.Looper;
23 import android.speech.RecognitionListener;
24 import android.speech.RecognizerIntent;
25 import android.speech.SpeechRecognizer;
26 import android.view.View;
27 import android.widget.TextView;
28 import android.widget.Toast;
29 import android.widget.ToggleButton;
31 import androidx.annotation.NonNull;
32 import androidx.appcompat.app.AppCompatActivity;
33 import androidx.core.app.ActivityCompat;
34 import androidx.core.content.ContextCompat;
36 import java.util.ArrayList;
37 import java.util.Locale;
58 private static final String
ACCESS_KEY =
"${YOUR_ACCESS_KEY_HERE}";
71 Toast.makeText(
this, message, Toast.LENGTH_SHORT).show();
76 public void invoke(
int keywordIndex) {
94 protected void onCreate(Bundle savedInstanceState) {
95 super.onCreate(savedInstanceState);
96 setContentView(
R.layout.activity_main);
102 if (!SpeechRecognizer.isRecognitionAvailable(
this)) {
108 speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
115 .setSensitivity(0.7
f)
120 String.format(
"%s\nEnsure your accessKey '%s' is a valid access key.", e.getMessage(),
ACCESS_KEY)
138 runOnUiThread(() -> {
139 TextView errorText = findViewById(
R.id.errorMessage);
140 errorText.setText(errorMessage);
141 errorText.setVisibility(View.VISIBLE);
143 ToggleButton
recordButton = findViewById(
R.id.record_button);
145 getApplicationContext(),
146 R.drawable.disabled_button_background));
164 return ActivityCompat.checkSelfPermission(
this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED;
168 ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.RECORD_AUDIO}, 0);
175 new Handler(Looper.getMainLooper()).postDelayed(
new Runnable() {
204 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
205 if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) {
252 case SpeechRecognizer.ERROR_AUDIO:
255 case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
258 case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
259 case SpeechRecognizer.ERROR_NETWORK:
262 case SpeechRecognizer.ERROR_NO_MATCH:
267 case SpeechRecognizer.ERROR_CLIENT:
269 case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
272 case SpeechRecognizer.ERROR_SERVER:
275 case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
288 ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
297 ArrayList<String> data = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
303 public void onEvent(
int eventType, Bundle params) {