@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
    }
  }
Esempio n. 2
0
  /** Show the view for the specified duration. */
  public void show() {
    if (mNextView == null) {
      throw new RuntimeException("setView must have been called");
    }

    INotificationManager service = getService();
    String pkg = mContext.getPackageName();
    TN tn = mTN;
    tn.mNextView = mNextView;

    try {
      service.enqueueToast(pkg, tn, mDuration);
    } catch (RemoteException e) {
      // Empty
    }
  }