blob: dc4a5b2e3156b3ebfb46a8c4e08a4309d5933b51 [file] [log] [blame]
/*
* Copyright (C) 2010 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.googlecode.android_scripting.activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import com.googlecode.android_scripting.Log;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* A utility class supplying helper methods for {@link Service} objects.
*
* @author Felix Arends (felix.arends@gmail.com)
*/
public class ServiceUtils {
private ServiceUtils() {
}
/**
* Marks the service as a foreground service. This uses reflection to figure out whether the new
* APIs for marking a service as a foreground service are available. If not, it falls back to the
* old {@link #setForeground(boolean)} call.
*
* @param service
* the service to put in foreground mode
* @param notificationId
* id of the notification to show
* @param notification
* the notification to show
*/
public static void setForeground(Service service, Integer notificationId,
Notification notification) {
final Class<?>[] startForegroundSignature = new Class[] { int.class, Notification.class };
Method startForeground = null;
try {
startForeground = service.getClass().getMethod("startForeground", startForegroundSignature);
try {
startForeground.invoke(service, new Object[] { notificationId, notification });
} catch (IllegalArgumentException e) {
// Should not happen!
Log.e("Could not set TriggerService to foreground mode.", e);
} catch (IllegalAccessException e) {
// Should not happen!
Log.e("Could not set TriggerService to foreground mode.", e);
} catch (InvocationTargetException e) {
// Should not happen!
Log.e("Could not set TriggerService to foreground mode.", e);
}
} catch (NoSuchMethodException e) {
// Fall back on old API.
// service.setForeground(true); //too old to be supported
NotificationManager manager =
(NotificationManager) service.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(notificationId, notification);
}
}
}