- Necessary version
- Bluetooth Low Energy
- Required permissions
In french: BeaconDétectePrécis
Used to find the Beacons near the device.
// In a museum, we want to display on the visitor device the information
// regarding the masterpiece he is looking at. Associate to each Beacon
// the same UUID corresponding to the museum as well as Major and Minor numbers
// allowing each Beacon to be uniquely identified.
// A Beacon is placed next to each work of art in the museum.
// The application must call the BeaconDetectPrecise function with a
// BeaconGroup variable corresponding to the museum tags.
// The callback procedure passed as parameter to the function will be called whenever
// a new list of Beacons is detected. Then, all you have to do is find
// the nearest Beacon to identify the work the visitor is looking at and to display
// the corresponding information in the application.
// Museum UUID
sUUID is string = "f4231ab6-5ef2-6c99-4229-af6c72e0446e"
// Create a beaconGroup variable corresponding to the museum tags
groupMuseum is beaconGroup
groupMuseum.UUID = sUUID
// Start the detection
INTERNAL PROCEDURE ProcDetection(arrInfo is array of beaconDetectionInfo)
nMinDistance is int
NearestBeacon is beaconDetectionInfo
FOR EACH Information OF arrInfo
IF nMinDistance = 0 _OR_ Information.Distance < nMinDistance
NearestBeacon = Information
// Display information about the masterpiece associated with the tag
<Result> = BeaconDetectPrecise(<Group of Beacons> , <WLanguage procedure>)
- True if the detection was started,
- False otherwise. To get more details on the error, use ErrorInfo.
<Group of Beacons>: beaconGroup variable
Name the of beaconGroup variable that describes the searched group of Beacons.
<WLanguage procedure>: Procedure name
Name of the WLanguage procedure ("callback") called when a new list of Beacons is detected.
This procedure has the following format:
PROCEDURE <Procedure Name>(<Array of Detection Info>)
where <Array of detection info> is a beaconDetectionInfo
variable that describes the information about the detected Beacons (identifiers, Major/Minor numbers, distance, etc.)
- This function thoroughly studies Bluetooth emissions around the device to detect Beacons and to estimate how far they are. This study consumes a lot of energy: therefore, it is recommended to call this function only if there is at least one nearby Beacon.
To do so, you can call BeaconDetectBackground then BeaconDetectPrecise from the callback procedure run when the application detected the entry in the Beacon transmission range.
Furthermore, we advise you to stop the precise detection as soon as possible. BeaconStopPreciseDetection is used to stop the current detection: it can for example be called in the WLanguage procedure run when the application detects the exit from the transmission range of the beacons.
- The precise detection of Beacons is performed only when the application is in the foreground. When the application goes into background, the detection is automatically suspended and it will resume as soon as the application goes back into foreground. The detection is permanently stopped when the application is stopped. To perform a detection in background, use BeaconDetectBackground.
- When generating the application, you can allow BeaconDetectPrecise to be called when the application is in the background (option "Allow calling GPSFollowMovement and BeaconDetectPrecise when the application is in the background" in the "Configuration" step of the wizard).. In this case, the precise detection can continue when the application is in background or when the device is in stand-by mode. For more details, see Generating an iOS application.
- Several precise detections cannot be started at the same time. If BeaconDetectPrecise is called while a detection is already in progress, the current detection will be stopped and a new detection will be started.
Beacon management functions are only available on Android 4.3 or later (API level 18).
A fatal error occurs if the function is used with an earlier system version.
To determine the version of Android the application is running on, use SysAndroidVersion
Bluetooth Low Energy
The device must support the Bluetooth Low Energy technology (Bluetooth LE).
The call to this function modifies the permissions required by the application.
Required permission: ACCESS_COARSE_LOCATION : Allows the application to get the approximate device position.
Android 11 specific case:
This function requires the ACCESS_BACKGROUND_LOCATION permission to access the device's location.
This permission allows using the function when the application is in the background.
If the application needs to use background location:
A window allows users to:
- Manually add the "ACCESS_BACKGROUND_LOCATION" permission in the Android application generation wizard.
- Explicitly request background location permission with PermissionRequest. For example:
INTERNAL PROCEDURE Callback(p is Permission)
IF p.Granted THEN
// Functions that require background location access can be used
- allow access to the device location while the application is in the background,
- allow access to the location only while the application is in use,
- deny access to the location. The user can also change these permissions at any time in the Android settings.
- Follow Google's guidelines for applications that require background location access. For more details, see https://support.google.com/googleplay/android-developer/answer/9799150. If these conditions are not met (especially user information requirements), applications may not be accepted for publication on Google Play.
- The background location permission should only be requested if the location permission has been granted. Otherwise, PermissionRequest will fail.
- If the option chosen by the user for the background location access request is more restrictive than the option chosen for the location access request, the application will be automatically restarted.
- On devices running Android 10 or earlier, if location permission has been granted to the application, the background location permission will be granted without displaying a window.