Stap 4: Android Code
Voor de android code moet u verschillende dingen doen.
Eerst alleen in de mainactivity klasse moet u twee dingen toevoegen. Het eerste ding is een SpeechRecognizer en het tweede ding is een TAG voor het debuggen van uw app.
private SpeechRecognizer sr; private static final String TAG = "MainActivity";
Nu, in de onCreate functie moet u deze vier regels toevoegen. De eerste twee zijn voor de knop iets te doen, de derde en vierde zijn voor spraakherkenning.
ImageButton speakButton = (ImageButton) findViewById(R.id.btn_speak); speakButton.setOnClickListener(this); sr = SpeechRecognizer.createSpeechRecognizer(this); sr.setRecognitionListener(new listener());
Na de onCreate-functie die u wilt aanbrengen van een nieuwe klasse voor de spraakherkenning.
class listener implements RecognitionListener { public void onReadyForSpeech(Bundle params) {} public void onBeginningOfSpeech() {} public void onRmsChanged(float rmsdB) {} public void onBufferReceived(byte[] buffer) {} public void onEndOfSpeech() {} public void onError(int error) { if(error != 7) { Log.d(TAG, "error " + error); } } public void onResults(Bundle results) { String str = ""; // Create new empty string // Get the results from the speech recognizer ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); // If there is data if(data.size() != 0) { // Add all the data to a string for (int i = 0; i < data.size(); i++) { Log.d(TAG, "result " + data.get(i)); str += data.get(i); str += " "; } // Create a lowercase string str = str.toLowerCase(); // Send the GET request with message String message = "message=" + str; new Background_get().execute(message); } } public void onPartialResults(Bundle partialResults) { Log.d(TAG, "onPartialResults"); } public void onEvent(int eventType, Bundle params) { Log.d(TAG, "onEvent " + eventType); } }
Na deze klasse die u wilt toevoegen een onClick functie die wordt geactiveerd wanneer u op de knop drukt.
public void onClick(View v) { if (v.getId() == R.id.btn_speak) { // Activate the speech listener Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); sr.startListening(intent); } }
Het enige wat dat we moeten toevoegen is nu de klasse die omgaat met de GET-aanvragen te verzenden.
Het is dezelfde klasse, zoals ik in mijn vorige instructables gebruikt.
/*****************************************************/ /* This is a background process for connecting */ /* to the arduino server and sending */ /* the GET request with the added data */ /* */ /* !! INTERNET Permission !! */ /* */ /*****************************************************/ private class Background_get extends AsyncTask<String, Void, String> { protected String doInBackground(String... params) { try { /* Change the IP to the IP you set in the arduino sketch */ URL url = new URL("http://192.168.1.177/?" + params[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder result = new StringBuilder(); String inputLine; while ((inputLine = in.readLine()) != null) result.append(inputLine).append("\n"); in.close(); connection.disconnect(); return result.toString(); } catch (IOException e) { e.printStackTrace(); } return null; } }
Dit was de codering voor de app. Het enige wat dat we moeten doen nu is de toevoeging van machtigingen naar uw app, zodat de spraak en het internet kunnen worden gebruikt.