For recent release notes, please see:
Android Player release notes prior to January 2020
Version 21.5 - 2019-12-26
putScreenData(name, value)for inserting new data into the current state. This screen data will be returned to the server during the regular communication cycle.
getPlayerTime()returns the internal player time in milliseconds since epoch. This time is updated based on server time and is typically more accurate than the system clock (especially if NTP is blocked or disabled).
Version 21.4 - 2019-12-14
- When downloading blobs locally via p2p, priority is given to using peers that have complete and verified blobs (rather than incomplete, unverified blobs which could be corrupted).
getData()function will also search main sequence data if requested data is not found in screen data, current item data or current sequence data.
Version 21.3 - 2019-11-10
- Added support for barcode readers that use TAB as a termination character.
systemLoadAverageto screen data. Data taken from
/proc/loadavgrespectively. Please note the availability of this information is dependent on Android version and hardware configuration.
- RS232 monitored and text lines added to rs232input in screen data. (Most recently received ASCII line)
- Added support for RS232 input triggers to event system.
- Added support for regular expression matching to barcode, NFC and RS232 pattern scanning.
Version 21.2 - 2019-10-03
- Fixed problem with deeply nested inner sequences skipping items (see server notes 7.6.9).
Version 21.1 - 2019-09-13
- Fixed problem preventing events added to the screen from firing.
Version 21.0 - 2019-09-04
- Local web server added. Enable by adding
- View and watch live logging information.
- View contents of local blobstore and download status.
- Access media in the local blobstore.
- Access current player state.
- View and watch live logging information.
- DS Loader does not stop running when launching another activity from an event with a resume delay set. DS Loader will return to the foreground after the configured resume delay.
- Scrolling text is hidden when
Version 20.3 - 2019-08-13
- Fixed possible delete and download loop when a blobstore location has inadequate storage available. The measurement for preallocated storage was incorrect, this could lead to blobstore locations marked as inadequate when they met the storage requirements.
Version 20.2 - 2019-08-10
- Downloads are saved to the blobstore location with most available storage.
- Storage cleanup triggered when storage used exceeds
cleanupThreshold. For example,
cleanupThreshold=0.8performs cleanup when a blobstore location exceeds 80% of the available storage. Cleanup will delete unused, cached BLOBs.
Version 20.1 - 2019-06-25
- Fixed event duplication problem that subsequently caused double execution of triggered actions.
Version 20.0 - 2019-06-22
- Duplicate, matching triggers can now execute multiple actions. Prior to this release, a trigger would only execute the the first action in event list. Please check interactive configurations that use multiple events as this change could have unexpected consequences if there is a reliance on subsequent actions not executing.
- Fixed problem displaying single web pages on Android 9 (API level 28) and above. (Caused by disabled MIME type sniffing so pages rendered as
- Changed default WebView cache to 20 views. (
- Changed webview caching behaviour to support redirects from the initial page.
- Added F10 key to ask exit.
Version 19.3 - 2019-06-19
- Local display report file deleted when
report=falseset in screen data.
- New display records with date prior to 2019-01-01 ignored. Assumes system clock failure.
- New display records with date prior to
Version 19.2 - 2019-06-04
- Added support for
fullscreenWarningTextto display full screen warning.
Version 19.1 - 2019-05-31
- If counting storage takes over 10 seconds, a storage cleanup is triggered. Cleanup will delete unused, cached BLOBs.
- Added support for
Urito extra STREAM intent.
Version 19.0 - 2019-05-28
- Invalid BLOB download responses aborted prior to downloading body. (Content-Length header must match expected length)
- Stored BLOBs larger than length defined by BLOB ID are deleted.
- Duplicate BLOBs found in multiple local blobstores deleted. If BLOBs are incomplete, only largest BLOB is kept.
Version 18.12 - 2019-05-15
- Added support for launching custom Android Intents.
- Added support for displaying a local camera stream on the screen. To configure, add an item to display streaming media with the address
Version 18.11 - 2019-05-03
- Outbound connections to blobstores and stacks servers now include
Refererheader set to the cloud config address and
User-Agentheader set to player version and android version. This will be useful for stats and fault finding.
Version 18.10 - 2019-02-01
- Periodic blobstore integrity checking prevented from running at startup unless current time is after
corruptionCheckTimeplus 10 minutes.
Version 18.9 - 2019-01-30
- Added last known GPS fix to
gpsFixMillisin screen data. This can be used in conditions to confirm GPS is working.
- Added additional periodic blobstore integrity checking. This re-checks the data in each BLOB file matches its name (fingerprint) daily. Any file failing verification is deleted (and will be downloaded later). Failure increments
blobDataCorruptionin screen data. If
blobDataCorruption > 0it is likely file storage on the local device is faulty. Please note, this value will also be incremented if a proxy manipulates downloaded data. Some mobile data providers re-encode images and videos to make them smaller. The player regards this as a Man In The Middle (MITM) attack and will delete the data and increment
blobDataCorruption. Default periodic check time is 03:00 (based on screen TimeZone). To change set
corruptionCheckTime=07:00to disable, set
corruptionCheckTime=disable. Please be aware that is does not affect existing verification checking that occurs immediately after downloads complete.
Version 18.8 - 2019-01-05
- The add data action is followed by an automatic refresh of the current slot in sequence. This allows conditions in current slot to be re-evaluated and an alternate item to be selected. Typical use case is to select a different language.
- Custom media sources that fail to throw an error or complete within configured duration are now skipped. An additional 20 seconds is added to this timeout to allow for buffering delays.
Version 18.7 - 2018-11-26
- Standby black screen option is now always black, overriding any custom background colour that has been set in screen data.
Version 18.6 - 2018-11-14
- Fixed problem processing GPS location on devices set to a locale that uses a comma as a decimal separator.
Version 18.5 - 2018-10-08
- Added tilde support for passing data through to custom media streaming URLs. For example, the following URL will be updated to replace
~screenIdwith the screen ID of the active player:
- Added support for receiving data and triggers over the local network. This enables sending GPS location from a separate device on the local network. Contact us for GPS sending APK.
Version 18.4 - 2018-09-12
- Fixed problem where the first two storage locations (
blobstoreExternal) could still be used even if they are disabled.
- The reported values for free storage space are now more accurately updated when custom settings are applied to
Version 18.3 - 2018-08-23
collectGps=truethe GPS location is stored periodically on the device. This stored GPS location is then reused following a device restart until an accurate GPS fix is obtained.
Version 18.2 - 2018-08-16
- If no GPS location is available when player starts with
gpsLongitudestored in screen data is added to display report records instead.
Version 18.1 - 2018-08-09
- GPS data no longer added to collected data report when
collectGps=trueis set. This is no longer necessary as the GPS coordinates are added to the display report.
requiredGpsAccuracyto support setting the accuracy required for GPS to be updated. Default is 50 meters.
- Fixed problem sending display report records when some records contained GPS and some did not. This resulted in sending duplicate entries with the wrong GPS data if no GPS was available when player starts.
- Enhanced how dynamic clock is set after restarting the app using server time offsets.
Version 18.0 - 2018-07-25
- Fixed restart caused by specifying a BLE config when no supported hardware on device.
- Added support for displaying HDMI input directly on the screen (pass-through).
- Configured by adding a resource with a streaming media address of
- Designed and tested for Zidoo X9s (Realtek chipset).
- Please note: Zidoo X9s can not play HDMI IN at the same time as another video. (waiting for new firmware)
- Configured by adding a resource with a streaming media address of
Version 17.1 - 2018-07-12
- Added support for checking if GPS is inside a polygon for advanced conditions -
- Key events are now processed by all sequences currently on the screen.
Version 17.0 - 2018-06-28
- Added new screen data option
reportOptions=verifyClockto prevent storing reporting records and collecting data if the clock has not be verified as correct.
- Built with Gradle 3.1.3 and Android tools 27.0.3
Version 16.2 - 2018-06-28
- Updated how display report data and collected data is parsed and sent to the server.
- Added more logging for player communications.
Version 16.1 - 2018-06-15
- If a custom media resource has a known duration and known duration less than configured item duration the sequence will progress automatically on completion.
Version 16.0 - 2018-06-06
- Downloading prioritises active items and fills storage with scheduled items ordered by start date. This enables using sequences larger than the storage available on the device providing storage is sufficient for active items at all points in time. Remaining storage is used for as many scheduled items as possible.
- When storage is full, the cleanup routine only deletes items necessary to download active items.
- Items scheduled later are deleted to make space for items scheduled sooner.
- Data sharing via p2p optimised to support larger networks of screens. Peer request list limited to 8 blobs. When localPeerCount exceeds 8, random silencing reduces number of concurrent peer responses.
Version 15.3 - 2018-05-16
- Attempts to recover from situation where player start() called twice from DS Loader.
- Double start could result in a duplicate display records.
collectGps=trueone duplicate record will be missing GPS.
- Issue more likely to occur on mobile data networks.
Version 15.2 - 2018-05-08
- Collected data report corruption issue fixed.
Version 15.1 - 2018-05-03
- Added workaround for proxies and firewalls that remove the Range header from requests. Download resuming not possible in such situations.
- Added additional 5 second delay after download failures to prevent network overload.
hdmiStateto screen data to report HDMI connection status.
Version 15.0 - 2018-03-02
- GPS location stored in display records when
collectGps=trueadded to screen data. Note: when downgrading, previously saved display records containing GPS data will be lost.
- Added support for sending an RS232 command at startup when
rs232outputAtStart=...added to screen data.
Version 14.5 - 2018-03-02
- GPS values now use 5 decimal places in both screen data and collected data. Assuming hardware capable, this is an accuracy of 1.1 meters. Extra decimal places no longer sent to server.
- The Android boot time is now added to screen data as
hardwareBootMillis. This will allow a app restart to be differentiated from a device restart.
- Scrollbars on WebViews now hidden unless resource is marked as interactive.
Version 14.4 - 2018-01-24
- Fixed problem where a duplicate report record was generated if an item was inside inner sequences and the item referring to the inner sequence had reporting enabled. This player version will not create the duplicate but will create a report record for the item referring to the inner sequence and items inside the inner sequence as expected.
- Removed unused field
sequenceIdfield in display reports and collected data reports is no longer used. The
sequenceIdis now derived using the
itemIdand ItemInfo metadata. This means report storage and sending is more efficient.
Version 14.3 - 2017-12-08
- WebView error handling updated.
- Only errors loading the main page are displayed.
- Red error page replaced with more friendly centered message reading No Internet Connection with link to retry.
Version 14.2 - 2017-11-23
- Added support for
report=falseto screen data. This option will disable reporting entirely.
- Prevented reporting on items referring to inner sequences if there are no items ready to be displayed.
- When severe problems occur or main thread stalls, the player will auto restart and resume from the next slot. This should ensure the full sequence gets displayed rather than restarting at slot 1.
- Modified the download decision logic to prioritise a large blob transfer if no large transfers active. This should make better use of bandwidth when many small blobs are queued.
- Increased the branch limit from 10 to 100 to support deep interactive menu systems.
Version 14.1 - 2017-11-15
- Exit prompt shown when back is pressed 5 times rapidly.
- Added Samsung RS232 Screen control.
Version 14.0 - 2017-10-24
- Repackaged as APK to support easier testing in Android Studio without DS Loader.
- Avoids accessing blobstore as mode public (which was required in early Android for video playback).
- Only prints insufficient storage warning in logs if all storage locations are full.
Version 13.2 - 2017-09-08
- Player communications timeout increased to 60 seconds.
- Single background thread for player communications.
Version 13.1 - 2017-09-01
- Fixed problem applying
Version 13.0 - 2017-08-17
- Bluetooth low energy physical web implementation.
- Screens can now broadcast a beacon that helps connecting to the platform from a nearby device.
- Enable BLE beacon transmission by adding
beaconConfig=blepwto screen data. Requires Android 5.1 and hardware support.
Version 12.2 - 2017-08-05
- Display report records no longer written if time before the reporting epoc. This happens if the system clock is wrong.
Version 11.14 - 2017-07-15
- Support for RS232 HEX encoded output using
- RS232 logging improved.
Version 11.13 - 2017-07-06
- Output from RS232 after sending command is sent to logcat.
- After failing to send a command to RS232, reconnection is attempted.
Version 11.12 - 2017-06-27
autoStartsetting can be applied to screen data.
autoStart=falsewill prevent ds-loader and the player starting after a reboot. The default can also be added to the cloud config and will be complied into ds-loader.apk
Version 11.11 - 2017-06-23
- Added new functions for custom timezones in conditions.
- Fixed problem that caused unresponsiveness when processing large local display reports for sending. This problem affected devices that connected after collecting data for a week or more offline.
Version 11.10 - 2017-06-03
- Empty barcode events ignored and not collected.
Version 11.9 - 2017-05-25
- Increased maximum player comms response size from 4MB to 16MB to support more complex sequences. This change is designed to support complex composite items containing 100 or more internal elements.
Version 11.8 - 2017-05-18
- Storage statistics sent to server when downloads finish even when updateCondition=false.
- Transfer rate statistics are now based on most recent 10 downloads/uploads and not removed.
Version 11.7 - 2017-05-17
- Conditional logic for
intranetBlobsConditionnow correctly evaluated when
- Default value for
updateCondition. This change replaces the 10 minute delay used in android-player-11.6 to detect when updates are disabled.
- When active period is too short to download the required data, downloading is controlled by evaluating the conditional logic above.
- Frequency of local blob request sending reduced to once every 30 seconds to support slow networks.
- Minimum acceptable transfer rate reduced to 4KB/s over a period of 1 minute to support very slow networks without dropping connections.
- If a local peer or Internet blob data transfer fails, a retry is not attempted for 5 minutes from same source.
- Note: This update will make downloading from secondary Internet blobstores more likely if there are frequent failures.
Version 11.6 - 2017-05-12
- Downloads from blobstores are stopped if player communication does not occur for 10 minutes.
- This ensures long running downloads are stopped if the player is not in an active period (i.e. updateCondition is false).
Version 11.5 - 2017-05-04
- Composite items containing no resources available no longer prevent composite from being displayed. This is to support invisible touchable regions (or buttons) and avoid the need for invisible PNGs.
- Download sources that generated an error are now blocked for 10 minutes. (previously 1 hour).
- Support for stretching images, bypassing aspect ratio lock. (
- Player components are reused if onCreate() called twice during screen rotation. Requires DS Loader 12.7.
- Support for RS232 output using USB to RS232 converters.
- Most Prolific and FTDI chipsets supported.
- Setup comms by adding data to screen:
rs232config=38400,8,1,none(This example will set baud to 38400, bits to 8, stop bits to 1 with no parity)
- Send output directly from data in an item. For example
rs232output=avi=1(This example will send
avi=1to the serial output)
- Fixed issue that prevented fresh installations creating directories for blobstore in secondary location.
- Peer to peer blob sharing version 2.
- Player periodically broadcasts a blob request list.
- Concurrent blob request processing provides immediate blob response.
- LAN data downloads interrupt active Internet downloads.
- Instant download resuming with nearest byte precision.
- Download queue dynamically updated when sequence changes mid download or a new blobstore added.
- Configurable download and upload concurrency. Defaults:
- Configurable min and max transfer rates. Defaults:
- Transfer rate data sent to server in data:
- Peer to peer v2 uses port 9097 for UDP broadcast.
- Blobstore reports storage statistics only when downloading.
- Screen data for restartTime, rebootTime and exitTime transferred to ds-loader.
- Added support for event actions to open 3rd party applications.
- Fixed problem introduced in 10.5 that prevented updating the dynamic clock.
- A playback synchronisation request is not sent if a touch action has occurred within last 5 minutes. This means touch actions no longer interfere with other screens timing on a sequence with playback synchronisation enabled.
- Status icon added. Enable with
- A timeZoneOverride in screen data is now set as the system default.
- Fixed issue that interrupted reporting if the user navigated to previous item.
- Fixed issue that could lead to a storage becoming full if two large downloads started concurrently with insufficient free space available for both.
- Uses repackaged classes from server version 4.0.
- Active sequence frames now updated (if required) when downloading completes.
- Bar code scanning can now function even if there are no active items on the screen.
- New option to collect GPS location and send to collected data report. Enable
collectGps=truein screen data.
- Support for new conditional functions
- Fixed problem where videos in a composite failed to start if
- When playback synchronisation is enabled, video cleanup is delayed by 300ms. Reduces black gaps.
- Barcodes and NFC data now added to screen data even if events not defined so the data can be used in conditions.
- Fixed recursive framing issue that occured if a frame or composite item contained inner sequence.
- Now and Next item information access for HTML sequence frames.
rootSequence.offset(-1).labelreturns label of previous item.
rootSequence.labelreturns label of current item.
rootSequence.offset(1).labelreturns label of next item.
rootSequence.offset(2).labelreturns label of item after next.
- Please note that next items are a prediction based on current data used for item evaluation.
- Support for sequence frames added.
- Support for closed captions / subtitles added.
- Ensure captions are enabled in Android settings. (Menu->Settings->Accessibility->Captions)
- Upload .vtt subtitle file to the item in addition to the video. (Check listed as text/vtt after upload)
- For non-english language add the language to the data for the subtitle resource item. For example
- Android 4.4+ required.
- Support for displaying labels of items in a sequence.
headlinefrom a sequence with the label
videoscan be accessed using
- A thumbnail image with use ticked prevented items displaying on player 8.3. This is now resolved.
- Fixed issue where an inner sequence containing more than one of the same inner sequence reported an error.
- Videos can be started at a specific offset using
offsetMillisin item data.
offsetMillismust be set to the number of milliseconds from the start of the video. Please note that seek accuracy varies greatly between devices and video types.
- An item will only be selected for display if all resources associated with the item are available.
- Resource selection updated to prefer matching aspect ratio images or videos for display area.
- Core evaluation engine updated to handle inner sequences and branching more efficiently.
- Fixed problem where a sequence of 10 or more inactive slots could cause subsequent condition evaluation to be skipped.
- Data from composite items correctly added to URL when
- Fixed issue where two successive triggers in less than the duration of active transition could cause view hierarchy to be cleared.
stackNumberto data for use in conditions.
- Text rendering for displaying text items in composites (beta). To be used for rendering RSS title text at the same time as RSS images and videos.
DigitalSignageTriggerCallback(data);. This makes it possible to have a direct communication route into a interactive web page running on a device. Ideal for games where a smartphone acts as a controller.
- Fixed bug that could occur if multiple videos are in a single item and the one selected to display has not completed downloading.
- Core stacks engine updated to resolve issues with some advanced conditions.
- Video blanker for masking black screen seen between videos with another colour. Set
background=#FFFFFFin screen data to enable and
videoBlankerPeriodto change the period at the beginning and end of playback to mask.
- Additional write check to ensure that read only storage is not included in free-space count.
- Some devices throw a FileNotFoundException when they run out of storage space. This exception now triggers a cleanup. The cleanup will remove all blobs in the blobstore that are not currently in use (reserved).
- Devices that fail to serve valid blobs via p2p blob sharing get blacklisted and subsequently ignored.
- WebViews are cached and reused for quick web page display. Disable with
- Minimum blob transfer rate controlled using
blobTransferRateMin. Connections are terminated if transfer rate falls below this value. Alternate sources will be used.
- Maximum blob transfer rate controlled using
blobTransferRateMax. Transfer is paused when rate exceeded. Useful for devices that can not download at high transfer rate and play HD videos at the same time.
- Transfer rates of blobs added to log output.
- Event actions to show item with a undefined resume delay no longer causes app restart.
- Screen cleared and controller removed when sequence set to none after being active. Resolves issue with
- Device TimeZone can now be overridden by setting
timeZoneOverridein screen data.
- Overridden values such as
xOverride, yOverride, widthOverride, heightOverridemust follow convention of
Overridebeing a suffix not prefix.
- Multiple video playback synchronisation modes added see manual.
- Event actions to show web page with a undefined resume delay no longer causes app restart.
- Additional playback synchronisation optimisation to improve accuracy.
- Playback synchronisation code rewritten.
- Players maintain an accurate local dynamic clock using server time.
- Items are scheduled based on the local dynamic clock to reduce effects of network latency.
- New settings
syncVideoOffsetadded to make small changes when hardware differs.
- Devices no longer send playback synchronisation data if they are downloading or missing content.
- All local players must be upgraded to version 6+ to use this new algorithm.
- Upgrading DS Loader to version 8.6+ will enhance accuracy of dynamic clock.
- When local peers download from a peer still downloading from the Internet, the local data streams are throttled rather than trying again later. This removes the 1 minute retry delay that could cause slow local blob sharing.
- Key sequences (such as from barcode reader) only trigger events in main sequence and not inner sequences within composite views.
- Jackson JSON serialisation library updated to 2.3.2 (last version supporting Android 2.2).
- SurfaceView added to FrameLayout at startup to remove flicker when VideoView added later. See http://stackoverflow.com/questions/8772862/surfaceview-flashes-black-on-load/12636285#12636285 .
- Bitmap cache now uses
Runtime.maxMemory()to estimate how much memory to use for caching rendered bitmaps. This improves stability on devices that incorrectly report maximum memory. Can be overridden by setting
maxBitmapCacheSizein screen data.
- Temp directory now emptied at startup.