Basé sur the docs from Azure, lorsqu'une notification à distance arrive, vous obtenez un rappel comme celui-ci:
public class MyHandler extends NotificationsHandler {
public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
Context ctx;
@Override
public void onReceive(Context context, Bundle bundle) {
ctx = context;
String nhMessage = bundle.getString("message");
sendNotification(nhMessage);
if (MainActivity.isVisible) {
MainActivity.mainActivity.ToastNotify(nhMessage);
}
}
private void sendNotification(String msg) {
// put your notification code here
...
}
}
Si vous souhaitez filtrer les notifications en fonction de quelles balises sont présentes, vous pouvez ajouter cette logique à la méthode onReceive comme ceci:
public void onReceive(Context context, Bundle bundle) {
if (!(MyApplication)this.getApplication()).isBeaconVisible()) {
// Suppress notification by returning early from method
return;
}
...
}
Le isBeaconVisible()
ci-dessus pourrait être mis en œuvre dans une classe d'application Android personnalisée en utilisant la bibliothèque Beacon Android avec quelque chose comme ci-dessous. Vous devrez en savoir plus sur la configuration de cette bibliothèque pour que cela fonctionne. Vous devrez également enregistrer la classe Application personnalisée dans votre AndroidManifest.xml.
public class MyApplication extends Application implements BeaconConsumer, RangeNotifier {
public Collection<Beacon> mVisibleBeacons;
public void onCreate() {
super.onCreate();
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
// TODO: look up the proper I_BEACON_LAYOUT in a google search
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(I_BEACON_LAYOUT));
beaconManager.addRangeNotifier(this);
}
@Override
public void onBeaconServiceConnect() {
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
try {
beaconManager.startRangingBeaconsInRegion(new Region("all-beacons", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
mVisibleBeacons = beacons;
}
public boolean isBeaconVisible() {
return mVisibleBeacons.size() > 0;
}
}
La logique ci-dessus pour isBeaconVisible()
renvoie vrai si une quelconque balise avec un identificateur a été vu dans la dernière seconde. Mais vous pouvez modifier cela pour le rendre plus sophistiqué selon vos besoins.