私の目的は、利用可能な TTS 音声エンジンとそれぞれの利用可能な言語を取得することです。次のコードを使用して、使用可能なエンジンを正常に取得できます。
PackageManager pm = getPackageManager();
Intent ttsIntent = new Intent();
ttsIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
// ttsIntent.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
ArrayList<String> engineInfo = new ArrayList<String>();
List<ResolveInfo> list = pm.queryIntentActivities(ttsIntent,
PackageManager.GET_META_DATA);
for (ResolveInfo appInfo : list) {
engineInfo.add(appInfo.activityInfo.applicationInfo.packageName);
engineInfo.add(appInfo.activityInfo.applicationInfo.loadLabel(pm)
.toString());
}
上記のコメントアウトされた行は、インテントのデータ エクストラを要求します。私は多くの検索を行いましたがqueryIntentActivities()
、この方法で「getExtra」または「putExtra」を使用する例は見つかりません。
したがって、これはオプションではなく、どこかでこれが不可能な理由の基本を読むために戻る必要があると思いますか!?
データを取得しようとすると、null ポインターが返されます!=null
。どちらが少し奇妙かを確認している場合でも、null ポインターが返されます。
appInfo.activityInfo.applicationInfo.metaData.getEtcEtc...
事前に感謝します。
postPutEXTRA:
API レベルは 9 であるため、getEngines()は使用できませんが、それぞれの tts オブジェクトを初期化する必要があるため、とにかく理想的ではありません。
postPutEDIT:
関連する uid を抽出するためにループ内で次のことを試しましたが、テストした音声エンジンの 1 つを除いてすべてでは機能しませんでした。
ApplicationInfo ai = null;
try {
ai = pm.getApplicationInfo(appInfo.activityInfo.applicationInfo.packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
}
String[] voices = pm.getPackagesForUid(ai.uid);