@Override protected void onHandleIntent(Intent intent) { NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification.Builder builder = new Notification.Builder(this); builder .setContent(buildContent(0)) .setTicker(getText(R.string.ticker), buildTicker()) .setContentIntent(buildContentIntent()) .setLargeIcon(buildLargeIcon()) .setSmallIcon(R.drawable.ic_stat_notif_small_icon) .setOngoing(true); Notification notif = builder.getNotification(); for (int i = 0; i < 20; i++) { notif.contentView.setProgressBar(android.R.id.progress, 100, i * 5, false); mgr.notify(NOTIFICATION_ID, notif); if (i == 0) { notif.tickerText = null; notif.tickerView = null; } SystemClock.sleep(1000); } mgr.cancel(NOTIFICATION_ID); }
@Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); final boolean enabled = intent.getBooleanExtra(LocationManager.EXTRA_GPS_ENABLED, false); boolean visible; int iconId, textResId; if (action.equals(LocationManager.GPS_FIX_CHANGE_ACTION) && enabled) { // GPS is getting fixes iconId = com.android.internal.R.drawable.stat_sys_gps_on; textResId = R.string.gps_notification_found_text; visible = true; } else if (action.equals(LocationManager.GPS_ENABLED_CHANGE_ACTION) && !enabled) { // GPS is off visible = false; iconId = textResId = 0; } else { // GPS is on, but not receiving fixes iconId = R.drawable.stat_sys_gps_acquiring_anim; textResId = R.string.gps_notification_searching_text; visible = true; } try { if (visible) { Intent gpsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); gpsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, gpsIntent, 0); Notification n = new Notification.Builder(mContext) .setSmallIcon(iconId) .setContentTitle(mContext.getText(textResId)) .setOngoing(true) .setContentIntent(pendingIntent) .getNotification(); // Notification.Builder will helpfully fill these out for you no matter what you do n.tickerView = null; n.tickerText = null; n.priority = Notification.PRIORITY_HIGH; int[] idOut = new int[1]; mNotificationService.enqueueNotificationWithTag( mContext.getPackageName(), null, GPS_NOTIFICATION_ID, n, idOut); } else { mNotificationService.cancelNotification(mContext.getPackageName(), GPS_NOTIFICATION_ID); } } catch (android.os.RemoteException ex) { // well, it was worth a shot } }