Как определить, доступна ли речь о тексте на андроиде?

Я считаю, что выяснил, как определить, есть ли у Android-устройства микрофон, например:

Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); List<ResolveInfo> speechActivities = packageManager.queryIntentActivities(speechIntent, 0); TextView micAvailView = (TextView) findViewById(R.id.mic_available_flag); if (speechActivities.size() != 0) { //we have a microphone } else { //we do not have a microphones } 

Тем не менее, как определить, имеет ли устройство Android возможность речевого взаимодействия? Или следует ли использовать это для обнаружения? Если да, то как определить, есть ли у устройства микрофон?

Любая обратная связь приветствуется, спасибо.

Код, который вы подключили, действительно используется для определения доступности звука [1]:

 // Проверьте, присутствует ли активность распознавания
 PackageManager pm = getPackageManager ();
 Список действий = pm.queryIntentActivities (
   Новый Intent (RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
 If (activities.size ()! = 0) {
   speakButton.setOnClickListener (это);
 } Else {
   speakButton.setEnabled (ложь);
   SpeakButton.setText («Распознаватель не присутствует»);
 }

Чтобы проверить, присутствует ли микрофон, просто следуйте коду в [2] и документах в [3], при вызове prepare () вы должны получить исключение IOException, если микрофон недоступен:

 Recorder = new MediaRecorder ();
 recorder.setAudioSource (MediaRecorder.AudioSource.MIC);
 recorder.setOutputFormat (MediaRecorder.OutputFormat.THREE_GPP);
 recorder.setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);
 recorder.setOutputFile (путь);
 recorder.prepare ();

[1] http://developer.android.com/resources/articles/speech-input.html
[2] http://developer.android.com/guide/topics/media/index.html#capture
[3] http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html

После прочтения ответа руководства, это то, что я придумал. Для меня это выглядит очень грубо, хотелось бы, чтобы был лучший способ. Я согласен с ответом руководства, но если есть лучший способ, пожалуйста, скажите мне.

 package; import java.io.File; import java.io.IOException; import java.util.List; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.media.MediaRecorder; import android.speech.RecognizerIntent; public class MediaUtil { //returns whether a microphone exists public boolean getMicrophoneExists(Context context) { PackageManager packageManager = context.getPackageManager(); return packageManager.hasSystemFeature(PackageManager.FEATURE_MICROPHONE); } //returns whether the microphone is available public static boolean getMicrophoneAvailable(Context context) { MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); recorder.setOutputFile(new File(context.getCacheDir(), "MediaUtil#micAvailTestFile").getAbsolutePath()); boolean available = true; try { recorder.prepare(); } catch (IOException exception) { available = false; } recorder.release(); return available; } //returns whether text to speech is available public static boolean getTTSAvailable(Context context) { PackageManager packageManager = context.getPackageManager(); Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); List<ResolveInfo> speechActivities = packageManager.queryIntentActivities(speechIntent, 0); if (speechActivities.size() != 0) return true; return false; } }