If you think the Android project DashClockWidget listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/*
* Copyright 2013 Google Inc./*www.java2s.com*/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/package com.google.android.apps.dashclock;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.support.v4.content.WakefulBroadcastReceiver;
import com.google.android.apps.dashclock.api.DashClockExtension;
importstatic com.google.android.apps.dashclock.LogUtils.LOGD;
importstatic com.google.android.apps.dashclock.Utils.MINUTES_MILLIS;
/**
* A broadcast receiver in charge of scheduling DashClock extension refreshes. This was
* originally handled by updatePeriodMillis but custom refresh behavior and a separation of
* extension refreshes from widget refreshes was desirable so was moved here.
*/publicclass PeriodicExtensionRefreshReceiver extends WakefulBroadcastReceiver {
privatestaticfinal String TAG = LogUtils.makeLogTag(PeriodicExtensionRefreshReceiver.class);
privatestaticfinal String ACTION_PERIODIC_ALARM
= "com.google.android.apps.dashclock.action.PERIODIC_ALARM";
@Override
publicvoid onReceive(Context context, Intent intent) {
if (intent == null || !ACTION_PERIODIC_ALARM.equals(intent.getAction())) {
return;
}
// Periodic alarm has triggered. Update all extensions.
startWakefulService(context,
getUpdateAllExtensionsIntent(context, DashClockExtension.UPDATE_REASON_PERIODIC));
}
privatestatic Intent getUpdateAllExtensionsIntent(Context context, int reason) {
LOGD(TAG, "getUpdateAllExtensionsIntent, reason=" + reason);
returnnew Intent(context, DashClockService.class)
.setAction(DashClockService.ACTION_UPDATE_EXTENSIONS)
.putExtra(DashClockService.EXTRA_UPDATE_REASON, reason);
}
/**
* Sets the refresh schedule if one isn't set already.
*/publicstaticvoid updateExtensionsAndEnsurePeriodicRefresh(final Context context) {
LOGD(TAG, "updateExtensionsAndEnsurePeriodicRefresh");
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
// Update all extensions now.
context.startService(getUpdateAllExtensionsIntent(context,
DashClockExtension.UPDATE_REASON_MANUAL));
// Schedule an alarm for every 30 minutes; it will not wake up the device;
// it will be handled only once the device is awake. The first time that this
// alarm can go off is in 15 minutes, and the latest time it will go off is
// 45 minutes from now.
PendingIntent pi = PendingIntent.getBroadcast(context, 0,
new Intent(context, PeriodicExtensionRefreshReceiver.class)
.setAction(ACTION_PERIODIC_ALARM),
PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(pi);
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 15 * MINUTES_MILLIS,
AlarmManager.INTERVAL_HALF_HOUR,
pi);
}
}