- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
看来你必须在onActivityResult中调用super方法
super.onActivityResult(requestCode, resultCode, data);
当我按下 Activity 上的后退按钮时,我从 TTS 收到此错误。显然这是因为我没有调用 shutdown() 但我是,请参阅下面的 onDestroy()。我制作了一个 Activity 扩展的抽象 TtsActivity 类。我在所有子类中调用 super.onDestroy()。
12-05 18:04:05.268: ERROR/ActivityThread(30240): Activity com.mysite.myapp.ActivitySelectItGame has leaked ServiceConnection android.speech.tts.TextToSpeech$1@43e9b4a0 that was originally bound here
12-05 18:04:05.268: ERROR/ActivityThread(30240): android.app.ServiceConnectionLeaked: Activity com.mysite.myapp.ActivitySelectItGame has leaked ServiceConnection android.speech.tts.TextToSpeech$1@43e9b4a0 that was originally bound here
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread$PackageInfo$ServiceDispatcher.<init>(ActivityThread.java:1121)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread$PackageInfo.getServiceDispatcher(ActivityThread.java:1016)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ContextImpl.bindService(ContextImpl.java:863)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.content.ContextWrapper.bindService(ContextWrapper.java:347)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:467)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:433)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at com.mysite.android.library.activity.ActivityTTS.onActivityResult(ActivityTTS.java:98)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at com.mysite.myapp.ActivityGame.onActivityResult(ActivityGame.java:445)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.Activity.dispatchActivityResult(Activity.java:3890)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread.access$2800(ActivityThread.java:125)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.os.Looper.loop(Looper.java:123)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at java.lang.reflect.Method.invoke(Method.java:521)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-05 18:04:05.268: ERROR/ActivityThread(30240): at dalvik.system.NativeStart.main(Native Method)
我的类(class)正在扩展的 Activity
public abstract class ActivityTTS extends Activity implements OnInitListener {
//TEXT TO SPEECH SERVICE
public static final int CHECK_TTS_AVAILABILITY = 101;
private static final String TAG = "ActivityTTS";
private TextToSpeech mTts; //Text to speech library
//MESSAGES
private String NO_TTS_ANDROID_MARKET_REDIRECT =
"'SpeechSynthesis Data Installer' is not installed on your system, you are being redirected to" +
" the installer package. You may also be able to install it my going to the 'Home Screen' then " +
"(Menu -> Settings -> Voice Input & output -> Text-to-speech settings)";
private String NO_TTS_AVAILABLE =
"'SpeechSynthesis Data Installer' is not available on your system, " +
"you may have to install it manually yourself. You may also be able to install it my going to the 'Home Screen' " +
"then (Menu -> Settings -> Voice Input & output -> Text-to-speech settings)";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate() called in ActivityTTS");
try { //A weird error was occurring on some phones with the TTS, hence the try catch
//TTS Service
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, CHECK_TTS_AVAILABILITY);
} catch (Exception e) {
Toast.makeText(this, NO_TTS_AVAILABLE, Toast.LENGTH_LONG).show();
finish();
}
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
/**
* Add a custom audio file for a particular
* audio element.
*
* @param text
* @param filename
*/
protected void addSpeech(String text, String filename ) {
mTts.addSpeech(text, filename);
}
/**
* For TTS
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
//Log.d(TAG, "TTS Response: "+requestCode);
if (requestCode == CHECK_TTS_AVAILABILITY) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
this.mTts = new TextToSpeech(this, this);
} else {
// missing data, install it
Toast.makeText(this, NO_TTS_ANDROID_MARKET_REDIRECT, Toast.LENGTH_LONG).show();
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
Toast.makeText(this, NO_TTS_AVAILABLE, Toast.LENGTH_LONG).show();
} else {
startActivity( installIntent );
}
finish();
}
}
}catch (Exception e) {
Log.e(TAG, "Unable to access service");
finish();
}
}
/**
* Loads when the TTS is ready
*/
@Override
public void onInit(int status) {
mTts.setLanguage(Locale.getDefault());
}
/**
* Speak text
*/
protected void speak(String text) {
try{
mTts.stop(); //Stop speaking
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
catch(Exception e) {
Log.e(TAG, "TTS Failed - cannot say: "+text );
}
}
/**
* Speak a pre-recorded word
*/
protected void speak(String text, File filename) {
try{
mTts.stop(); //Stop speaking
mTts.addSpeech(text, filename.toString());
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
catch(Exception e) {
Log.e(TAG, "TTS Failed - cannot say: "+text );
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//Close the Text to Speech Library
if(mTts != null) {
mTts.stop();
mTts.shutdown();
Log.d(TAG, "TTS Destroyed");
}
}
public void setLanguage(Locale audioLocale) {
mTts.setLanguage(audioLocale);
}
}
这是与ActivityGame中的 Activity 相关的代码
public abstract class ActivityGame extends ActivityTTS {
...
protected void speak() {
if (Logging.INFO) Log.i(TAG, "Speaking");
if(this.mVoicePreference) {
String word = mBoundService.getCurrentWord().getSpelling();
if(WordRecordingHelper.recordingExists(word)) {
try{
File f = new File(Constants.SDCARD_RECORDINGS+WordRecordingHelper.formatRecordedWord(word));
super.addSpeech(word, f.getAbsolutePath());
} catch (Exception e) {
if(Logging.WARN) Log.w(TAG, "An error occurred while trying to use addSpeech()", e);
}
}
//play the audio
super.speak(word);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
...
}
@Override
protected void onDestroy() {
super.onDestroy();
....
}
}
这里是ActivitySelectItGame,它根本不引用TTS,只是扩展了ActivityGame
public class ActivitySelectItGame extends ActivityGame {
...
}
但是我从一个完全不相关的 Activity 中遇到了完全相同的问题,扩展了 ActivityTTS。
最佳答案
@Override
protected void onDestroy() {
//Close the Text to Speech Library
if(mTts != null) {
mTts.stop();
mTts.shutdown();
Log.d(TAG, "TTS Destroyed");
}
super.onDestroy();
}
我认为问题是您在 Activity 被破坏后关闭 mTts。尝试使用我发布的代码。让我知道这是否可行
关于android - TTS 错误 : leaked ServiceConnection android. speech.tts.TextToSpeech,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4242401/
对于 Android 上的新 TextToSpeech 实例,我遇到了 onInit(..) 的意外问题。 我发现的所有代码示例都假定在调用 onOnit(..) 之前将新实例返回给调用者,以便返回值
我试着像这样使用它 int result2 = tts_hebrew.setLanguage(Locale.iw); 但我无法识别为 Locale.iw。 在http://developer.andr
更新:经过一番挖掘,我设法在 Logcat 中找到了一些信息。见底部。 编辑 2:我现在从头开始创建了一个新 Activity 来减少这个问题。它仍然不能正常工作。这是代码: public class
我正在尝试在不同的类中调用 TextToSpeech。这是我的类(class)现在的样子: //MainActivity.java public class MainActivity extends
我正在创建一个涉及短信的 Android 应用程序,其中一个功能是输入时会读出每个字母。我正在使用TextToSpeech。 我让它在一个测试项目中工作,但是当将它集成到我自己的项目中时,我收到一个未
我正在使用 TextToSpeech 向我的联系人中的某人发送短信。我使用一种非常丑陋的方式来做到这一点,因为我需要以一种方式说出所有表达式“发送消息到联系人短信是你好”。最好是像“发送消息”这样的应
我的安卓应用因为这个原因被亚马逊拒绝了。 当电话打进来时,我正在播放这个 TextToSpeech。他们要我停止播放。我该怎么做? 最佳答案 在实现 TextToSpeech 的服务或 Activit
我的应用程序正在调用广播接收器来读取传入的文本消息并大声说出来。我的 Broadcast Receiver 被正确调用,它正确读取文本消息,但是当涉及到 speak() 方法时,它就崩溃了。这是我的代
我有一个刷新的文本,每次都会发生这种情况。 我调用位于另一个具有以下结构的类中的静态方法方法speak(): public class Voc { static TextToSpeech my
由于内存不足的情况(在程序中,而不是程序员),我的应用程序一直在崩溃。 MAT 显示我的 Activity 的副本有时会在屏幕旋转时保留下来,并且唯一使伪造副本保持 Activity 状态的对象是每个
我希望能够将文本中的语音更改为语音 API,例如更改: 从女性到男性的声音。 让声音更清晰 改变语速 如果可能的话,请有人告诉我。谢谢。 最佳答案 您可以通过 addSpeech() 为特定字符串提供
我正在 TextToSpeech 上创建一个应用程序。但是当我试图运行时,它会在下一行抛出异常。 tts.speak(ruleOne, TextToSpeech.QUEUE_ADD, null); H
我正在使用下面的库来实现 TextToSpeech 功能来说话 - 'net.gotev:speech:1.3.1' 现在我需要将所有国家/地区的口音更改为我尝试过的美国英语 - Speech.get
使用 Android TextToSpeech 时,有什么方法可以指定语音的性别,例如 tts.setGender(TextToSpeech.MALE)或 tts.speak("Hello ") ?
@SuppressWarnings("deprecation") private void saveAudio(String text) { HashMap myHashRender = ne
The bounty在2天后过期。这个问题的答案有资格获得+50声望奖励。 Nerdy Bunz希望引起更多关于此问题的注意。 作为一项实验,以及一种迫使我自己了解tts在Android上工作原理的方
我是 Java 新手 我正在尝试使用 TextToSpeech,我有 Referenced libraries还有这个.java code通过具体的例子。 我的Main.java: package m
我需要调用synthesizeToFile来创建一些音频文件,并且我需要知道它何时完成创建所有这些文件,以便通知用户。 我已经阅读了其他问题,但没有找到适合我的问题,或者该问题与 speak 功能相关
我在onUteranceComplete()中连续调用文本转语音speak()方法,当事件发生时。说话方法工作正常,它不断地朗读文本,但我在这段代码中遇到了一个奇怪的问题。 Activity 结束后,
我试图做一些非常简单的事情,或者我认为它是。 在我的蓝牙聊天中,我设置了 public static boolean potato = false; 在我的 MainActivity 的 onCrea
我是一名优秀的程序员,十分优秀!