Question

Im coding an android app for about 4 months now and im currently getting an error on system notifications. The problem is that im adding proximity alerts from varius interest points, when it aproaches a specific point, it sends a system notification. But now, when im near of more than one point, it sends the correct amount of notifications but they are all the same, woth same title and text, and im passing different information on the intent. My code is:

MainActivity:

    private void addProximityAlert(double latitude, double longitude, String type, int id, String object) {
                   Intent intent = new Intent(PROX_ALERT_INTENT);
                   intent.putExtra("type", type);
                   intent.putExtra("id", id);
                   intent.putExtra("object", object);
                   PendingIntent proximityIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
                   locationManager.addProximityAlert(
                          latitude, // the latitude of the central point of the alert region
                          longitude, // the longitude of the central point of the alert region
                          POINT_RADIUS, // the radius of the central point of the alert region, in meters
                          PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no                           expiration
                          proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected
                   );

                   IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT);
                   registerReceiver(new ProximityReceiver(), filter);
            }

Proximity Receiver:

    public class ProximityReceiver extends BroadcastReceiver{


        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            String key = LocationManager.KEY_PROXIMITY_ENTERING;
           Boolean entering = intent.getBooleanExtra(key, false);
           int id = intent.getIntExtra("id", 0);
           String type = intent.getStringExtra("type");
           String name = intent.getStringExtra("object");
           Log.d("NOTIFICATION", "NOME: " + name);
           Log.d("NOTIFICATION", "ID: " + id);
           Log.d("NOTIFICATION", "TYPE:" + type);


           if (entering) {
                      Log.d(getClass().getSimpleName(), "entering");
               }else {
                      Log.d(getClass().getSimpleName(), "exiting");
               }
               NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

               Intent notificationIntent = new Intent(context, InterestPoint_Description.class);
               notificationIntent.putExtra("id", id);
               notificationIntent.putExtra("type", type);
               PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
               Notification notification = createNotification();
               notification.setLatestEventInfo(context, "LisbonRoutes", "You are near " + name + ", touch here to check it out!", pendingIntent);

               notificationManager.notify(Config.NOTIFICATION_ID, notification);
               Config.NOTIFICATION_ID++;

}

        private Notification createNotification() {
               Notification notification = new Notification();
               notification.icon = R.drawable.icon;
               notification.when = System.currentTimeMillis();
               notification.flags |= Notification.FLAG_AUTO_CANCEL;
               notification.flags |= Notification.FLAG_SHOW_LIGHTS;
               notification.defaults |= Notification.DEFAULT_VIBRATE;
               notification.defaults |= Notification.DEFAULT_LIGHTS;
               notification.ledARGB = Color.WHITE;
               notification.ledOnMS = 1500;
               notification.ledOffMS = 1500;
               return notification;
         }
    }

I hope i've explained it well :S Thanks in advance

Was it helpful?

Solution

Your pending intents are overwriting one another because extras do not make them unique.

See http://developer.android.com/reference/android/app/PendingIntent.html

it is important to know when two Intents are considered to be the same for purposes of retrieving a PendingIntent. A common mistake people make is to create multiple PendingIntent objects with Intents that only vary in their "extra" contents, expecting to get a different PendingIntent each time. This does not happen.

Best way to fix this is to set the request code, probably to id

PendingIntent proximityIntent = PendingIntent.getBroadcast(context, id, intent, 0);

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top