计时器和CPU唤醒在Android 10上不起作用

问题描述

我当时正在为低视力Android用户开发通话时钟,但是在Android 10上工作时遇到了问题。 我开发了一项服务,该服务使用Timer类检查当前时间,并使用TTS类讲小时。 我在清单文件添加了WAKE_LOCK权限,并且在Android 7.0和7.1上可以正常工作,但在Android 10中则不能。 这是servicee类的代码,但是我将更改一些变量名,因为它们是用塞尔维亚语编写的。

package net.ddns.daremc.dmtalkingclock;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.os.PowerManager;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

import androidx.annotation.Nullable;

public class DMTcclockService extends Service {
    private Timer timer;
    private talkingClockFunctions talkingclockfunctions;

    @Override
    public void onCreate() {
        super.onCreate();
        talkingclockfunctions = new talkingClockFunctions(this,getString(R.string.format_time),getString(R.string.format_date));
        timer = new Timer();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        this.timer.cancel();
        this.timer = null;
        try {
            talkingclockfunctions.finalize();
        }
        catch (Throwable gre) {
            gre.printstacktrace();
        }
        this.talkingclockfunctions = null;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent,int flags,int startId) {
    super.onStartCommand(intent,flags,startId);
    processtimer();
        return START_STICKY;
    }
    private void processtimer() {
        timer.scheduleAtFixedrate(new TimerTask() {
            @Override
            public void run() {
                int nMin = Calendar.getInstance().getTime().getMinutes();
                int nSec = Calendar.getInstance().getTime().getSeconds();
                if (nMin < 1 && nSec < 1) {
                    talkingclockfunctions.sayTime();
                }
                wakeupDevice();
            }
        },1000);
    }
    private void wakeupDevice() {
        new AsyncTask<Void,Void,Exception>() {
            @Override
            protected Exception doInBackground(Void... voids) {
            try {
                PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
                PowerManager.WakeLock wlc = powerManager.newWakeLock((PowerManager.ON_AFTER_RELEASE | PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP),"DM Talking Clock - PARTIAL WAKE LOCK");
                wlc.acquire();
                try {
                    Thread.sleep(10000);
                }
                catch (InterruptedException e) {
                    e.printstacktrace();
                }
                wlc.release();
            }
            catch (Exception e) {
                return e;
            }
                return null;
            }
        }.execute();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)