Android - после закрытия действия, когда я снова запускаю приложение, одновременно запускаются два действия. Как я могу избежать этого? - PullRequest
1 голос
/ 21 февраля 2012

Итак, у меня есть активность в моем приложении для Android, которое запускается при запуске.Это действие - просто страница с кнопкой запуска.Когда я нажимаю кнопку «Пуск», она вызывает другое действие и закрывается:

Intent i = new Intent(this, Dictating.class);
startActivity(i);
finish();

Другое действие использует текст в речь, чтобы диктовать некоторые слова.Теперь у меня происходит нечто странное:

1) Я слушаю диктовку.2) Я нажимаю кнопку «назад»: диктует остановки (что я хочу)3) Я снова запускаю приложение, нажимаю кнопку запуска.Теперь у меня есть новое действие, которое запускает и диктует, но сзади я слышу старое действие, которое возобновилось там, где оно было, и продолжает диктовать.

Я бы хотел, чтобы новое занятие начиналось заново, а другое занятие не сохранялось.Как я могу это сделать ?PS: Это проблема активности, а не проблема преобразования текста в речь, так как я каждый раз сбрасываю текст в речь. Она не может быть сохранена в памяти

Спасибо

РЕДАКТИРОВАТЬ:

Вот onCreate моего класса Dictating, в этом классе есть тонны кода, я, очевидно, не хочу публиковать весь свой код, поэтому вот некоторые части:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.streaming);

    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

    this.txtCurrentWord = (TextView) findViewById(R.id.txtCurrentWord);
    this.btnPlayPause = findViewById(R.id.btnPlayPause);
    this.btnPlayPause.setOnClickListener(this);

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_DATA_CHECK_CODE) {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
            // success, create the TTS instance
            this.tts = new TextToSpeech(this, this);
        } else {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }
}

Есть несколько странных вещей, которые я делаю, например:

Runnable task = new Runnable() {
    public void run() {
        //runs on ui
        runOnUiThread(new Runnable() {
            public void run() {
                readNextWord();
            }
        });
    }
};
worker.schedule(task, 1, TimeUnit.SECONDS);

это задерживает следующее слово на одну секунду, а затем выполняет функцию в основном потоке пользовательского интерфейса.не уверен, если это имеет значение

и некоторые промывки в конце:

@Override
public void onDestroy() {
    tts.shutdown();
    super.onDestroy();
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Вам необходимо добавить свойство launchMode к вашей деятельности в файле AndroidManifest, более подробно см. "Использование файла манифеста"

0 голосов
/ 09 июля 2013

Этому вопросу больше года, но я не могу поверить, что никто никогда не давал вам правильный ответ.Кроме того, я не думаю, что вы должны были принять ответ, который явно ничего не решал для вас.Принимая такие ответы, вы просто загромождаете результаты поиска StackOverflow в Google ненужными для других людей с такой же проблемой.

Промывка, которую вы делаете в конце, совершенно неверна.В соответствии с жизненным циклом Activity, onDestroy () никогда не будет вызываться гарантированно.Если вы хотите убедиться, что очистка выполнена правильно, сделайте это внутри onPause ().

А пока решение, которое я вам даю, решает основную проблему, которую вы описали.Однако, если у вас есть время для более полного переписывания, вы захотите использовать службу, которую вы привязали к своей деятельности.Это даст вам лучший контроль, который вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...