Rating: Show notification when the app is closed.

How to show notification when app is closed with api rating. Since it has a default BeaconService, we need to implement it at the app level to show a notification when the app is closed. So for this I am trying the following code.

Activity: -

public class Dashboard extends Activity {
private static final String TAG = Dashboard.class.getSimpleName();
ConnectionDetector cDetector;
private static final int NOTIFICATION_ID = 123;
private NotificationManager notificationManager;
JSONParser jParser = new JSONParser();

AlertDialogManager alert;
private static final String URL_NOTIFICATIONS = "";
ArrayList<NameValuePair> pairs;
private static final int REQUEST_ENABLE_BT = 1234;
private ProgressDialog pDialog;
private BeaconManager bManager;
// private Beacon beacon;
private Region region = new Region("regionID", null, null, null);
List<Beacon> beaconList;

BroadcastReceiver receiver;
Intent serviceIntent;



@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notify_demo);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    cDetector = new ConnectionDetector(getApplicationContext());

    // check Internet connection
    if (!cDetector.isConnectingToInternet()) {
        alert.showAlertDialog(this, "Internet Connection Error",
                "Please connect to working internet connection", false);

        return;
    }

    bManager = new BeaconManager(getApplicationContext());
    bManager.setRangingListener(new BeaconManager.RangingListener() {
        @Override
        public void onBeaconsDiscovered(Region region,
                final List<Beacon> beacons) {
            // Note that results are not delivered on UI thread.
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // Note that beacons reported here are already sorted by
                    // estimated distance between device and beacon.
                    getActionBar().setSubtitle(
                            "Found beacons: " + beacons.size());

                }
            });
        }
    });
    Log.i("BeaconsList", "beaconslist" + beaconList);
    // region = new Region("regionId", ((Beacon)
    // beaconList).getProximityUUID(),
    // ((Beacon) beaconList).getMajor(),
    // ((Beacon) beaconList).getMinor());
    notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    // Default values are 5s of scanning and 25s of waiting time to save CPU
    // cycles.In order for this demo to be more responsive and immediate we
    // lower down those values.
    bManager.setBackgroundScanPeriod(TimeUnit.SECONDS.toMillis(1), 0);



    bManager.setMonitoringListener(new MonitoringListener() {

        @Override
        public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
            // TODO Auto-generated method stub
            postNotification("Welcome to Walmart !Today there is 10% off on all Goods.");
            // new GetNotificationData().execute();
        }

        @Override
        public void onExitedRegion(Region arg0) {
            // TODO Auto-generated method stub
            postNotification("Exit region");
        }
    });
}

@Override
protected void onStart() {
    super.onStart();

    // Check if device supports Bluetooth Low Energy.
    if (!bManager.hasBluetooth()) {
        Toast.makeText(this, "Device does not have Bluetooth Low Energy",
                Toast.LENGTH_LONG).show();
        return;
    }

    // If Bluetooth is not enabled, let user enable it.
    if (!bManager.isBluetoothEnabled()) {
        Intent enableBtIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    } else {
        connectToService();
    }
}

@Override
protected void onStop() {
    try {
        bManager.stopRanging(region);
    } catch (RemoteException e) {
        Log.d(TAG, "Error while stopping ranging", e);
    }

    super.onStop();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_ENABLE_BT) {
        if (resultCode == Activity.RESULT_OK) {
            connectToService();
        } else {
            Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_LONG)
                    .show();
            getActionBar().setSubtitle("Bluetooth not enabled");
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

private void connectToService() {
    getActionBar().setSubtitle("Scanning...");

    bManager.connect(new BeaconManager.ServiceReadyCallback() {
        @Override
        public void onServiceReady() {
            try {
                bManager.startRanging(region);
            } catch (RemoteException e) {
                Toast.makeText(
                        Dashboard.this,
                        "Cannot start ranging, something terrible happened",
                        Toast.LENGTH_LONG).show();
                Log.e(TAG, "Cannot start ranging", e);
            }
        }
    });
}


@Override
protected void onResume() {
    super.onResume();

    notificationManager.cancel(NOTIFICATION_ID);
    bManager.connect(new BeaconManager.ServiceReadyCallback() {
        @Override
        public void onServiceReady() {
            try {
                bManager.startMonitoring(region);
            } catch (RemoteException e) {
                Log.d(TAG, "Error while starting monitoring");
            }
        }
    });
}

@Override
protected void onDestroy() {
    notificationManager.cancel(NOTIFICATION_ID);
    bManager.disconnect();
    super.onDestroy();
}

private void postNotification(String msg) {
    Intent notifyIntent = new Intent(Dashboard.this, Dashboard.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivities(
            Dashboard.this, 0, new Intent[] { notifyIntent },
            PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification.Builder(Dashboard.this)
            .setSmallIcon(R.drawable.beacon_gray)
            .setContentTitle("Notify Demo").setContentText(msg)
            .setAutoCancel(true).setContentIntent(pendingIntent).build();
    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.DEFAULT_LIGHTS;
    notificationManager.notify(NOTIFICATION_ID, notification);

    TextView statusTextView = (TextView) findViewById(R.id.status);
    statusTextView.setText(msg);
}
}

      

Application class: -

public class MyApplication extends Application {

BeaconManager bManager;
NotificationManager notificationManager;
private Region region = new Region("regionID", null, null, null);
private static final int NOTIFICATION_ID = 123;

@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
    bManager = new BeaconManager(getApplicationContext());

    bManager.setRangingListener(new BeaconManager.RangingListener() {

        @Override
        public void onBeaconsDiscovered(Region regions, List<Beacon> beacons) {
            // TODO Auto-generated method stub
            Log.i("Beacons", "" + beacons.size());
        }
    });
    bManager.connect(new BeaconManager.ServiceReadyCallback() {
        @Override
        public void onServiceReady() {
            try {
                bManager.startMonitoring(region);
            } catch (RemoteException e) {
                Log.d("BEACON", "Error while starting monitoring");
            }
        }
    });

    notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    // Default values are 5s of scanning and 25s of waiting time to save CPU
    // cycles.In order for this demo to be more responsive and immediate we
    // lower down those values.
    bManager.setBackgroundScanPeriod(TimeUnit.SECONDS.toMillis(1), 0);


    bManager.setMonitoringListener(new MonitoringListener() {

        @Override
        public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
            // TODO Auto-generated method stub
            postNotification("Welcome to Walmart !Today there is 10% off on all Goods.");

        }

        @Override
        public void onExitedRegion(Region arg0) {
            // TODO Auto-generated method stub
            postNotification("Exit region");
        }
    });

}

private void postNotification(String msg) {
    Intent notifyIntent = new Intent(getApplicationContext(),
            Dashboard.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivities(
            getApplicationContext(), 0, new Intent[] { notifyIntent },
            PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification.Builder(
            getApplicationContext()).setSmallIcon(R.drawable.beacon_gray)
            .setContentTitle("Notify Demo").setContentText(msg)
            .setAutoCancel(true).setContentIntent(pendingIntent).build();
    notification.defaults |= Notification.DEFAULT_SOUND;
    notification.defaults |= Notification.DEFAULT_LIGHTS;
    notificationManager.notify(NOTIFICATION_ID, notification);

}
}

      

and I mentioned beaconservice in the manifest also like this.

Can anyone help on what is wrong here and how to show a notification when the app is closed.

+3


source to share





All Articles