java定时器,cpu唤醒在android 10上不工作

rkkpypqq  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(176)

我在为lovisionandroid用户开发一个会说话的时钟,而我在android10上遇到了问题。我开发了一个服务,它使用timer类检查当前时间,并使用tts类说出小时数。我在manifest文件中设置了wake\ u lock权限,在android7.0和7.1上这可以正常工作,但在android10中不行。这是servicee类的代码,但我将更改一些变量名,因为它们是用塞尔维亚语编写的。

  1. package net.ddns.daremc.dmtalkingclock;
  2. import android.app.Service;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.os.AsyncTask;
  6. import android.os.IBinder;
  7. import android.os.PowerManager;
  8. import java.util.Calendar;
  9. import java.util.Timer;
  10. import java.util.TimerTask;
  11. import androidx.annotation.Nullable;
  12. public class DMTCClockService extends Service {
  13. private Timer timer;
  14. private talkingClockFunctions talkingclockfunctions;
  15. @Override
  16. public void onCreate() {
  17. super.onCreate();
  18. talkingclockfunctions = new talkingClockFunctions(this, getString(R.string.format_time), getString(R.string.format_date));
  19. timer = new Timer();
  20. }
  21. @Override
  22. public void onDestroy() {
  23. super.onDestroy();
  24. this.timer.cancel();
  25. this.timer = null;
  26. try {
  27. talkingclockfunctions.finalize();
  28. }
  29. catch (Throwable gre) {
  30. gre.printStackTrace();
  31. }
  32. this.talkingclockfunctions = null;
  33. }
  34. @Nullable
  35. @Override
  36. public IBinder onBind(Intent intent) {
  37. return null;
  38. }
  39. @Override
  40. public int onStartCommand(Intent intent, int flags, int startId) {
  41. super.onStartCommand(intent, flags, startId);
  42. processTimer();
  43. return START_STICKY;
  44. }
  45. private void processTimer() {
  46. timer.scheduleAtFixedRate(new TimerTask() {
  47. @Override
  48. public void run() {
  49. int nMin = Calendar.getInstance().getTime().getMinutes();
  50. int nSec = Calendar.getInstance().getTime().getSeconds();
  51. if (nMin < 1 && nSec < 1) {
  52. talkingclockfunctions.sayTime();
  53. }
  54. wakeupDevice();
  55. }
  56. }, 0, 1000);
  57. }
  58. private void wakeupDevice() {
  59. new AsyncTask<Void, Void, Exception>() {
  60. @Override
  61. protected Exception doInBackground(Void... voids) {
  62. try {
  63. PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
  64. PowerManager.WakeLock wlc = powerManager.newWakeLock((PowerManager.ON_AFTER_RELEASE | PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "DM Talking Clock - PARTIAL WAKE LOCK");
  65. wlc.acquire();
  66. try {
  67. Thread.sleep(10000);
  68. }
  69. catch (InterruptedException e) {
  70. e.printStackTrace();
  71. }
  72. wlc.release();
  73. }
  74. catch (Exception e) {
  75. return e;
  76. }
  77. return null;
  78. }
  79. }.execute();
  80. }
  81. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题