0

我想每天晚上 9:00 运行一项服务并做一些工作。

我正在使用 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 秒运行一次非常好。但是如何给它一个准确的运行时间。

4

1 回答 1

-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();

我从未尝试过,但您可以尝试一下。

于 2016-03-14T11:12:56.963 回答