所以我正在尝试构建一个应用程序,该应用程序将使用内置的文本在android中定期(每5秒)输出语音命令,而我已经使用倒数计时器进行了此操作。如果我保持萤幕开启,我就能成功完成这项工作,不过如果使用者锁定手机,我仍然希望语音指令仍然可以运作,但目前暂时无法运作。
尽管我认为这样做的方法是使用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()
,但结果仍然相同。
任何输入将不胜感激。预先感谢!