问题描述
我当时正在为低视力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 (将#修改为@)