目标:构建一个应用程序,提醒我在机器上打卡。它将在上午8点开始,每隔10分钟重复一次。每次,它都会使用TexttoSpeech提醒我插入。
基本服务和活动已经到位。 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);
}
}
答案 0 :(得分:1)
JobScheduler如何在特定的时间和分钟运行,然后每10分钟运行一次作业直到特定时间?
它不能。
JobScheduler
本质上是不准确的。您可以提供有关何时应运行作业以及作业运行时运行的一般指导。
特别是在Android 6.0及更高版本上,除了setAlarmClock()
上的AlarmManager
之外,没有任何内容符合您的要求。但是,使用它会产生UI影响,因为它是专为闹钟应用程序设计的。将其用于所需目的也可能会干扰设备上的任何实际闹钟应用程序(如果这是BYOD方案,而不是公司发布的设备)。此外,setAlarmClock()
是一次性事件;在处理上一个事件时,您需要再次致电setAlarmClock()
,以便安排何时再次获得控制权。