I use this example from newboston and it asks me to write, but after it finds out what I said, it will not update the list view.
Here is the code.
public class MainActivity extends Activity { private static final int RECOGNIZER_RESULT = 1234; ListView list; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = (ListView) findViewById(R.id.list); Button btn_speach = (Button)findViewById(R.id.btn_speak); btn_speach.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech to search"); startActivityForResult(intent, RECOGNIZER_RESULT); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == RECOGNIZER_RESULT && requestCode == RESULT_OK){ ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); list.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches)); for(int i = 0; i < matches.size(); i++){ Log.i("MainActivity", matches.get(i)); } } super.onActivityResult(requestCode, resultCode, data); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
Here is the xml layout.
<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" > <Button android:id="@+id/btn_speak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="Button" /> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/button1" > </ListView> </RelativeLayout>
I have no mistakes. And the following code does not print anything in LogCat.
for(int i = 0; i < matches.size(); i++){ Log.i("MainActivity", matches.get(i)); }
And I am testing my Android device that has speech recognition features.
source share