TTS收到但没有声音出来

时间:2012-08-17 13:00:29

标签: android notifications text-to-speech

我正在尝试使用TextToSpeech,但我有一些奇怪的问题。

让我简单解释一下我的应用程序架构。此应用程序将用于公交车时间。用户可以添加他们的总线进行通知。如果有任何变化,服务器将通知订户我想在这个应用程序中使用TTS。

我实施了Android GCM和通知系统,唯一的问题是TTS。

GCMIntentService.onMessage方法调用下面的generateNotification方法:

public static void generateNotification(Context context, String message) {
        int icon = R.drawable.icon_small;
        long when = System.currentTimeMillis();
        NotificationManager notificationManager = (NotificationManager)
                context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);
        String title = context.getString(R.string.app_name);       

        Bundle b = new Bundle();
        b.putString(EXTRA_MESSAGE, message);
        b.putString(READABLE_MESSAGE, message);

        Intent notificationIntent = new Intent(context, BusAlerts.class);
        notificationIntent.putExtra("CallType", CallType.NOTIFICATION);
        notificationIntent.putExtra("MessageReceived", b);
        // set intent so it does not start a new activity
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent intent =
                PendingIntent.getActivity(context, 0, notificationIntent,  Intent.FLAG_ACTIVITY_NEW_TASK);
        notification.setLatestEventInfo(context, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.defaults |= Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND;
        long[] vibrate = { 1000 };
        notification.vibrate = vibrate;          
        notificationManager.notify(0, notification);
    }

此代码成功生成通知。这是BusAlerts.codes(一些修剪过的;))

public class BusAlerts extends Activity implements OnInitListener {
private static TextToSpeech myTts;

@Override
    public void onCreate(Bundle savedInstanceState) {
        myTts = new TextToSpeech(this, null);
}

@Override
protected void onStart() {
        super.onStart();

//readableMessage extracts from bundles

speak(readableMessage);
}

public void speak(String text)
    {
         myTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);     
    }
@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
         if (myTts != null) {
             myTts.shutdown();
             myTts.stop();
             myTts = null;
            }
    }
public void onInit(int status) {
         if (status == TextToSpeech.SUCCESS) {

                int result = myTts.setLanguage(Locale.UK);

                if (result == TextToSpeech.LANG_MISSING_DATA
                        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                    Log.e("TTS", "This Language is not supported");
                } 
                else{
                    if (myTts.isLanguageAvailable(Locale.UK) == TextToSpeech.LANG_AVAILABLE || myTts.isLanguageAvailable(Locale.UK) == TextToSpeech.LANG_COUNTRY_AVAILABLE)
                        myTts.setLanguage(Locale.UK);
                }

            } else {
                Log.e("TTS", "Initilization Failed!");
            }

    }

如果用户从通知中打开此类,一切都很完美,但没有声音出来。当我调试它时,我看到如下情况。 enter image description here

但是如果用户按下Home按钮并重新打开应用程序(相同的活动恢复),用户可以听到声音。 它的情况是这样的。 enter image description here

正如我注意到mCachedParamters和mITts不同;但我不知道为什么。 我被困了一个星期,找不到解决方案。

1 个答案:

答案 0 :(得分:0)

你应该致电

speak(readableMessage);

仅在调用OnInit之后。 通过在Onstart中调用此方法,您无法保证这一点。这就是当你回到应用程序时它被初始化并且你能够听到

的原因