gpt4 book ai didi

android - 使用作业调度程序在特定时间然后以特定间隔重复作业

转载 作者:行者123 更新时间:2023-11-29 01:08:45 27 4
gpt4 key购买 nike

目标:构建一个提醒我在机器上打卡的应用程序。早上 8 点开始,每 10 分钟重复一次。每次,它都会使用 TexttoSpeech 提醒我打卡。

基本服务和 Activity 到位。 JobScheduler 如何在特定的时间和分钟运行,然后每 10 分钟运行一个作业直到特定时间?

public class Util {
public static void scheduleJob(Context context) {
ComponentName serviceComponent = new ComponentName(context, TestJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
jobScheduler.schedule(builder.build());
}
}

public class MyStartServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
Util.scheduleJob(context);
}
}

public class TestJobService extends JobService {
@Override
public boolean onStartJob(JobParameters jobParameters) {
Intent service = new Intent(getApplicationContext(), TestVoice.class);
getApplicationContext().startService(service);
Util.scheduleJob(getApplicationContext()); // reschedule the job
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
return true;
}
}

public class TestVoice extends AppCompatActivity {
TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this, new TextToSpeech.OnInitListener(){
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if(status == TextToSpeech.SUCCESS){
int result=tts.setLanguage(Locale.US);
if(result==TextToSpeech.LANG_MISSING_DATA ||
result==TextToSpeech.LANG_NOT_SUPPORTED){
Log.e("error", "This Language is not supported");
}
else{
ConvertTextToSpeech("Have you punched in?");
}
}
else
Log.e("error", "Initilization Failed!");
}
});
}
private void ConvertTextToSpeech(String text) {
// TODO Auto-generated method stub

if(text==null||"".equals(text))
{
text = "Content not available";
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}else
tts.speak(text+"is saved", TextToSpeech.QUEUE_FLUSH, null);
}
}

最佳答案

How can JobScheduler be run at a specific hour and minute, and then run a job every 10 minutes till a specific time?

不能。

JobScheduler 本质上是不精确的。您提供有关作业何时运行以及作业何时运行的一般指导。

特别是在 Android 6.0+ 上,除了 AlarmManager 上的 setAlarmClock() 之外,没有什么可以满足您的要求。但是,使用它会影响 UI,因为它是为闹钟应用程序设计的。将它用于您想要的目的也可能会干扰设备上的任何实际闹钟应用程序(如果这是 BYOD 场景,而不是公司发行的设备)。此外,setAlarmClock() 是一次性事件;作为处理上一个事件的一部分,您需要再次调用 setAlarmClock(),以安排您希望再次获得控制权的时间。

关于android - 使用作业调度程序在特定时间然后以特定间隔重复作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44955657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com