IntentNotFoundException для TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA

Я пытаюсь реализовать преобразование текста в речь, следуя эта статья в блоге разработчиков Android. Он предлагает следующий код для установки данных преобразования текста в речь, если он не поддерживается.

Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);

Это выдает Exception:

ActivityNotFoundException: Не найдено действий для обработки Intent

Однако я использую код здесь, чтобы определить, действительно ли намерение поддерживается. Вот представление списка:

[ResolveInfo{43cc5280 com.svox.pico.DownloadVoiceData p=0 o=0 m=0x108000}]

Почему это не работает?

Обновить

Не знаю почему, но сейчас вроде работает.


person Casebash    schedule 07.05.2010    source источник


Ответы (2)


Чтобы проверить, действительно ли намерение поддерживается или нет, используйте следующий код:

PackageManager pm = getPackageManager();
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
ResolveInfo resolveInfo = pm.resolveActivity( installIntent, PackageManager.MATCH_DEFAULT_ONLY );

if( resolveInfo == null ) {
   // Not able to find the activity which should be started for this intent
} else {
   startActivity( installIntent );
}

Если он не может найти действие с помощью resolveActivity(), это означает, что для действия требуются некоторые другие параметры, которые не указаны. В этом случае вы должны получить имя класса с помощью queryIntentActivities() и установить имя компонента/класса намерения.

person Karan    schedule 21.05.2010
comment
Ваш код для проверки того, поддерживается ли намерение, почти такой же, как тот, который я использую из Блог Android Dev и связан с моим сообщением, за исключением того, что queryIntentActivities заменены на resolveActivity. - person Casebash; 21.05.2010
comment
Если вы не укажете имя компонента для намерения, он внутренне использует метод resolveActivity() для разрешения активности с использованием заданных параметров. И если CATEGORY_DEFAULT не указан в фильтре намерений соответствующего класса, он вернет вам значение null. Принимая во внимание, что queryIntentActivities не проверяет параметр CATEGORY_DEFAULT. - person Karan; 21.05.2010
comment
Кстати, не могли бы вы вставить сюда вывод logcat? Подробности IntentResolver отображаются в logcat. - person Karan; 21.05.2010

На какую версию Android SDK вы ориентируетесь в своем коде? Помните, что TTS доступен только начиная с версии 1.6 (SDK уровня 4). Этот код нормально работает с 2.0 (SDK Level 5).

<uses-sdk android:minSdkVersion="5" />
person Fernando Miguélez    schedule 22.05.2010
comment
Мой минимальный SDK равен 3, но я нацелен на 7. У меня есть класс-оболочка, чтобы гарантировать, что он вызывается только для соответствующей версии. Я проверю это снова - person Casebash; 24.05.2010
comment
Это может быть проблемой. Попробуйте увеличить до 5. - person Fernando Miguélez; 31.05.2010