我希望每天晚上9点开始运营服务并做一些工作。
我正在使用GcmNetworkManager类,但我无法弄清楚如何给PeriodicTask提供准确的时间和日期。
这是我的GcmTaskService类
public class Sc extends GcmTaskService {
@Override
public int onRunTask(TaskParams taskParams) {
Log.i("onRunTask: " + taskParams.getTag(), "gcm task");
return GcmNetworkManager.RESULT_SUCCESS;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("onStartCommand", "gcm task");
return super.onStartCommand(intent, flags, startId);
}
}
清单声明
<service
android:name=".Sc"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
</intent-filter>
</service>
这就是我调用任务的方式
long periodSecs = 30L; // the task should be executed every 30 seconds
long flexSecs = 15L; // the task can run as early as -15 seconds from the scheduled time
String tag = "myScan|1";
PeriodicTask periodic = new PeriodicTask.Builder()
.setService(Sc.class)
.setPeriod(periodSecs)
.setFlex(flexSecs)
.setTag(tag)
.setPersisted(false)
.setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_ANY)
.setRequiresCharging(false)
.setUpdateCurrent(true)
.build();
GcmNetworkManager.getInstance(this).schedule(periodic);
它每30秒运行一次。但是如何给它准确的运行时间。
答案 0 :(得分:-1)
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9); for 9 am to 1o am
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PeriodicTask periodic = new PeriodicTask.Builder()
.setService(Sc.class)
.setPeriod(calendar.getTimeInMillis())
.setFlex(flexSecs)
.setTag(tag)
.setPersisted(false)
.setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_ANY)
.setRequiresCharging(false)
.setUpdateCurrent(true)
.build();
我从未尝试过这个,但你可以尝试一下。