我安裝了https://play.google.com/store/apps/details?id=com.ivona.tts和他們所有的聲音。我怎樣才能以編程方式獲得ivona tts所有已安裝聲音的列表?ivona tts以及如何以編程方式獲取所有安裝的聲音列表?
在android SDK 8中有這個命令嗎?
我可以以編程方式更改ivona tts的pico tts嗎?不適合我的程序整個電話?
我安裝了https://play.google.com/store/apps/details?id=com.ivona.tts和他們所有的聲音。我怎樣才能以編程方式獲得ivona tts所有已安裝聲音的列表?ivona tts以及如何以編程方式獲取所有安裝的聲音列表?
在android SDK 8中有這個命令嗎?
我可以以編程方式更改ivona tts的pico tts嗎?不適合我的程序整個電話?
辦法安裝TTS引擎列表,你應該得到的com.ivona.tts UID包:
http://developer.android.com/reference/android/content/pm/PackageManager.html#getApplicationInfo(java.lang.String,%20int%29
然後問PackageManager用於共享此UID的所有應用程序:
http://developer.android.com/reference/android/content/pm/PackageManager.html#getPackagesForUid(int%29
要更改TTS引擎,請使用此方法:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#setEngineByPackageName(java.lang.String%29
(請注意,此方法已過時,並且在新的API級別,你應該使用下面的構造函數:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#TextToSpeech(android.content.Context,%20android.speech.tts.TextToSpeech.OnInitListener,%20java.lang.String%29)
最後設置特定伊沃娜的聲音,你必須從語音包名稱解析語言/國家/名稱,並將其傳遞到:
http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#setLanguage(java.util.Locale%29 例如。選擇com.ivona.tts.voicebeta.eng.gbr.amy你應該使用:
tts.setLanguage(new Locale("eng", "gbr", "amy"));
這裏的樣本的活動,可打印呼聲logcat的:
package com.example.com.ivona.tts.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
public class TTSActivity extends Activity implements TextToSpeech.OnInitListener {
private static final String TAG = "TTSActivity";
private TextToSpeech tts;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(TTSActivity.this, TTSActivity.this);
}
@Override
public void onInit(int status) {
PackageManager pm = getPackageManager();
ApplicationInfo ai = null;
try {
ai = pm.getApplicationInfo("com.ivona.tts", 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
return;
}
String[] ivonaVoices = pm.getPackagesForUid(ai.uid);
Log.d(TAG, "Possible tts.setLanguage() usage:");
Pattern p = Pattern.compile("^com\\.ivona\\.tts\\.voicebeta\\.([^.]+)\\.([^.]+)\\.([^.]+)$");
for (String voice: ivonaVoices) {
Matcher m = p.matcher(voice);
if (m.matches())
Log.d(TAG, String.format("tts.setLanguage(\"%s\", \"%s\", \"%s\")", m.group(1), m.group(2), m.group(3)));
}
}
}
也許一個簡單的方法是使用下面的代碼從任何活動類:
final int TTS_CHECK_DATA = 977; // arbitrary number
private ArrayList<String> myVoices = null;
在一些活動類方法:
onActivityResult()Intent in = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
// if you want specific, non-default TTS Engine also set package, else skip:
in = in.setPackage("com.acapelagroup.android.tts"); // or whatever package you want
startActivityForResult(in, TTS_CHECK_DATA);
然後:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TTS_CHECK_DATA && data != null) {
myVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
}
}
現在myVoices填充區域設置字符串(郎國家變體),例如對於Acapela我得到:
pol-POL-Ania
eng-USA-Heather
eng-GBR-Rachel
rus-RUS-Alyona
TTS引擎,擁有每聲音只有一個揚聲器可能不會給你第三(變體)組成,例如Ivona現在只給你「eng-USA」,「eng-GBR」,「fra-FRA」等。
Greg
非常感謝Michael。 – mbrc
以及另一個例子,如果有人需要獲取所有已安裝的軟件包:http://www.coderzheaven.com/2011/04/03/how-to-get-information-about-all-the-applications-installed-in-your -android-emulator-or-phone-how-to-use-getpackagemanager-in-android/ – mbrc
但是在這種情況下,我們不希望所有已安裝的軟件包,只有那些與com.ivona.tts有共同sharedUid的軟件包。 –