WakeLock и таймер обратного отсчета - не работает при заблокированном экране - PullRequest
0 голосов
/ 08 мая 2020

, поэтому я пытаюсь создать приложение, которое будет периодически (каждые 5 секунд) выводить голосовую команду, используя встроенный текст в речь в android, и я сделал это с помощью таймера обратного отсчета. Я смогу успешно сделать это, если буду держать экран включенным, хотя я бы хотел, чтобы голосовые команды продолжали работать, если пользователь блокирует телефон, что сейчас не работает.

Хотя я пришел к выводу, что средство сделать это - использовать WakeLock, чтобы поддерживать активность, хотя я не думаю, что реализую его правильно. (Что происходит сейчас: кажется, что таймер завис при блокировке, а затем экран разблокировки, и голосовая команда не слышна, пока телефон заблокирован)

Вот код:

Добавлена ​​точка разрешения в файл манифеста:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Файл активности:

public class RunActivity extends AppCompatActivity {

    CountDownTimer countdown1;
    PowerManager.WakeLock wakeLock;
    TextToSpeech tts;
    // Please assume all all initializations and declarations are appropriate.

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_run);

        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "MyApp::MyWakelockTag");

        countdown1 = new CountDownTimer(50000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                counter1--;
                txtCentreNum.setText(String.valueOf(counter1));
                if (counter1 % 5 == 0)
                    tts.speak("Output Text", TextToSpeech.QUEUE_FLUSH, null, null);
            }

            @Override
            public void onFinish() {
                txtCentreNum.setText("-");
                wakeLock.release();

            }
        };
    }

    public void onStart() {
        super.onStart();

        countdown1.start();
        wakeLock.acquire();
    }

    @Override
    public void onResume() {
        super.onResume();

    }

    @Override
    public void onPause() {
        super.onPause();

    }

    @Override
    public void onStop() {
        super.onStop();

    }

    public void onDestroy() {
        super.onDestroy();

        wakeLock.release();
    }
}

Я уже искал другие похожие вопросы и пробовал другие способы, например, переместить acquire() в onResume(), но результат тот же .

Будем очень признательны за любые входные данные. Заранее спасибо!

...