|
Android example source code file (CheckUpdateService.java)
The CheckUpdateService.java Android example source code
/*
* Copyright (C) 2008 Google Inc.
*
* 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.photostream;
import android.app.Service;
import android.app.NotificationManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.app.AlarmManager;
import android.os.IBinder;
import android.os.SystemClock;
import android.content.Intent;
import android.content.Context;
import android.content.ContentValues;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
/**
* CheckUpdateService checks every 24 hours if updates have been made to the photostreams
* of the current contacts. This service simply polls an RSS feed and compares the
* modification timestamp with the one stored in the database.
*/
public class CheckUpdateService extends Service {
private static boolean DEBUG = false;
// Check interval: every 24 hours
private static long UPDATES_CHECK_INTERVAL = 24 * 60 * 60 * 1000;
private CheckForUpdatesTask mTask;
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
(mTask = new CheckForUpdatesTask()).execute();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mTask != null && mTask.getStatus() == UserTask.Status.RUNNING) {
mTask.cancel(true);
}
}
public IBinder onBind(Intent intent) {
return null;
}
static void schedule(Context context) {
final Intent intent = new Intent(context, CheckUpdateService.class);
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0);
Calendar c = new GregorianCalendar();
c.add(Calendar.DAY_OF_YEAR, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
if (DEBUG) {
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
30 * 1000, pending);
} else {
alarm.setRepeating(AlarmManager.RTC, c.getTimeInMillis(),
UPDATES_CHECK_INTERVAL, pending);
}
}
private class CheckForUpdatesTask extends UserTask<Void, Object, Void> {
private SharedPreferences mPreferences;
private NotificationManager mManager;
@Override
public void onPreExecute() {
mPreferences = getSharedPreferences(Preferences.NAME, MODE_PRIVATE);
mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
public Void doInBackground(Void... params) {
final UserDatabase helper = new UserDatabase(CheckUpdateService.this);
final SQLiteDatabase database = helper.getWritableDatabase();
Cursor cursor = null;
try {
cursor = database.query(UserDatabase.TABLE_USERS,
new String[] { UserDatabase._ID, UserDatabase.COLUMN_NSID,
UserDatabase.COLUMN_REALNAME, UserDatabase.COLUMN_LAST_UPDATE },
null, null, null, null, null);
int idIndex = cursor.getColumnIndexOrThrow(UserDatabase._ID);
int realNameIndex = cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_REALNAME);
int nsidIndex = cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_NSID);
int lastUpdateIndex = cursor.getColumnIndexOrThrow(UserDatabase.COLUMN_LAST_UPDATE);
final Flickr flickr = Flickr.get();
final Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
final Calendar reference = Calendar.getInstance();
while (!isCancelled() && cursor.moveToNext()) {
final String nsid = cursor.getString(nsidIndex);
calendar.setTimeInMillis(cursor.getLong(lastUpdateIndex));
reference.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
if (flickr.hasUpdates(Flickr.User.fromId(nsid), reference)) {
publishProgress(nsid, cursor.getString(realNameIndex),
cursor.getInt(idIndex));
}
}
final ContentValues values = new ContentValues();
values.put(UserDatabase.COLUMN_LAST_UPDATE, System.currentTimeMillis());
database.update(UserDatabase.TABLE_USERS, values, null, null);
} finally {
if (cursor != null) cursor.close();
database.close();
}
return null;
}
@Override
public void onProgressUpdate(Object... values) {
if (mPreferences.getBoolean(Preferences.KEY_ENABLE_NOTIFICATIONS, true)) {
final Integer id = (Integer) values[2];
final Intent intent = new Intent(PhotostreamActivity.ACTION);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(PhotostreamActivity.EXTRA_NOTIFICATION, id);
intent.putExtra(PhotostreamActivity.EXTRA_NSID, values[0].toString());
Notification notification = new Notification(R.drawable.stat_notify,
getString(R.string.notification_new_photos, values[1]),
System.currentTimeMillis());
notification.setLatestEventInfo(CheckUpdateService.this,
getString(R.string.notification_title),
getString(R.string.notification_contact_has_new_photos, values[1]),
PendingIntent.getActivity(CheckUpdateService.this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT));
if (mPreferences.getBoolean(Preferences.KEY_VIBRATE, false)) {
notification.defaults |= Notification.DEFAULT_VIBRATE;
}
String ringtoneUri = mPreferences.getString(Preferences.KEY_RINGTONE, null);
notification.sound = TextUtils.isEmpty(ringtoneUri) ? null : Uri.parse(ringtoneUri);
mManager.notify(id, notification);
}
}
@Override
public void onPostExecute(Void aVoid) {
stopSelf();
}
}
}
Other Android examples (source code examples)Here is a short list of links related to this Android CheckUpdateService.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.