Created
August 5, 2010 05:45
-
-
Save ianlevesque/509303 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private static final Class[] mStartForegroundSignature = new Class[] { | |
int.class, Notification.class}; | |
private static final Class[] mStopForegroundSignature = new Class[] { | |
boolean.class}; | |
private NotificationManager mNM; | |
private Method mStartForeground; | |
private Method mStopForeground; | |
private Object[] mStartForegroundArgs = new Object[2]; | |
private Object[] mStopForegroundArgs = new Object[1]; | |
/** | |
* This is a wrapper around the new startForeground method, using the older | |
* APIs if it is not available. | |
*/ | |
void startForegroundCompat(int id, Notification notification) { | |
// If we have the new startForeground API, then use it. | |
if (mStartForeground != null) { | |
mStartForegroundArgs[0] = Integer.valueOf(id); | |
mStartForegroundArgs[1] = notification; | |
try { | |
mStartForeground.invoke(this, mStartForegroundArgs); | |
} catch (InvocationTargetException e) { | |
// Should not happen. | |
Log.w("ApiDemos", "Unable to invoke startForeground", e); | |
} catch (IllegalAccessException e) { | |
// Should not happen. | |
Log.w("ApiDemos", "Unable to invoke startForeground", e); | |
} | |
return; | |
} | |
// Fall back on the old API. | |
setForeground(true); | |
mNM.notify(id, notification); | |
} | |
/** | |
* This is a wrapper around the new stopForeground method, using the older | |
* APIs if it is not available. | |
*/ | |
void stopForegroundCompat(int id) { | |
// If we have the new stopForeground API, then use it. | |
if (mStopForeground != null) { | |
mStopForegroundArgs[0] = Boolean.TRUE; | |
try { | |
mStopForeground.invoke(this, mStopForegroundArgs); | |
} catch (InvocationTargetException e) { | |
// Should not happen. | |
Log.w("ApiDemos", "Unable to invoke stopForeground", e); | |
} catch (IllegalAccessException e) { | |
// Should not happen. | |
Log.w("ApiDemos", "Unable to invoke stopForeground", e); | |
} | |
return; | |
} | |
// Fall back on the old API. Note to cancel BEFORE changing the | |
// foreground state, since we could be killed at that point. | |
mNM.cancel(id); | |
setForeground(false); | |
} | |
@Override | |
public void onCreate() { | |
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); | |
try { | |
mStartForeground = getClass().getMethod("startForeground", | |
mStartForegroundSignature); | |
mStopForeground = getClass().getMethod("stopForeground", | |
mStopForegroundSignature); | |
} catch (NoSuchMethodException e) { | |
// Running on an older platform. | |
mStartForeground = mStopForeground = null; | |
} | |
} | |
@Override | |
public void onDestroy() { | |
// Make sure our notification is gone. | |
stopForegroundCompat(R.string.foreground_service_started); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment