, поэтому я пытаюсь создать приложение, которое будет периодически (каждые 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()
, но результат тот же .
Будем очень признательны за любые входные данные. Заранее спасибо!