No solution to transfer JPG / PNG image from companion app to the watch app?

Hello,

We have developed a Garmin watch app for our companion mobile application, SityTrail - https://www.sitytrail.com - which is designed for outdoor activities and allows users to follow trails: apps.garmin.com/.../ab0b2f46-4909-4abb-a59d-6da66607f52c.

However, we have encountered an issue: we are unable to display the topographic map image (for the current location) on the Garmin watch app, as we do on other platforms like Wear OS and Apple Watch. On these platforms, the smartphone app transfers a small image of the map to the watch in JPEG/PNG format via BLE, and the watch decodes and displays it using the platform’s methods.

From what I’ve seen in previous forum posts, it appears that this approach is not possible on the Garmin platform, as there doesn’t seem to be a function for decoding a Bitmap on the watch side:

forums.garmin.com/.../transfer-a-bitmap

forums.garmin.com/.../sending-an-image-to-watch-app-from-phone-companion-app

Since these posts are quite old (9 years ago), I would like to know if this is still the case.

Is this limitation due to a technical restriction, or is it an intentional design decision by Garmin?

Is there any solution for displaying a JPEG/PNG image on a Garmin watch app other than embedding it in the application resources (which isn’t feasible for us) or loading it from a URL via Garmin servers using Communications.makeImageRequest()? The latter method requires a mobile Internet connection, which is not always available during outdoor activities, especially in mountainous regions or areas with poor network coverage.

This is particularly unfortunate, as displaying the topographic map would be very beneficial for our customers. As an example, here are some demo images generated with a static JPEG image included in the app’s resources:

Additionally, we’ve noticed that the makeImageRequest() function seems to be quite slow in retrieving the image (e.g., it takes 5 to 15 seconds to download a 60 KB JPEG image on a Forerunner 255 Music watch connected to a recent Android phone with a high-quality Internet connection). Is this expected behavior?

Thank you in advance for your assistance.

Best regards,

  • Worst case you can set up a webserver on the phone and reach it via localhost

  • actually not.  With a makeImageRequest, the image must be available on the internet, as it passes through a garmin server to be converted into a format  that the watch can use.

  • The Garmin servers are both a proxy and a processor for images, unlike regular web requests. If they released the tech specs on the image format that actually got sent back to the watch, and provided a way to "cast" the web result into a bitmap resourse, then maybe. Expect that sometime the day after forever.

  • Each time a new device is added, the server needs to be updated.  At one time on Android, the phone app did the conversion, but what that meant was if there was a bug or a new device, GCM needed too be updated.  That's why they went with the server approach, as updating the server was much faster than getting a new version of GCM generated and pushed out to users.  I'm pretty sure iOS always used the server.

  • That's a paradox: you wouldn't be able to connect a new unknown device to your phone's Garmin Connect app if it's too old... 

  • it was only for the image processing part.  So while you could pair a new device with GCM, it didn't know how to handle the makeImageRequest for that device and they already had the server for iOS.

  • The Pebble team had this wired easily.  There was one format the watches accepted, which IIRC was .png.  As long as you sent an appropriately sized .png file, it could be rendered on the screen. There are plenty of tools for app developers to convert any other format to .png and resize appropriately.  Simple and effective solution.  Perhaps Garmin could adopt the same strategy and make it easier for us app devs that want send images for rendering on the watch directly rather than relying on Internet coverage?

  • That's a paradox: you wouldn't be able to connect a new unknown device to your phone's Garmin Connect app if it's too old... 

    Well, akshually, I just tried manually adding a device using an old version (circa August 2019) of the Connect app on an old phone. It looks like all the latest devices were available, including Fenix 8, Fenix E and Enduro 3. The device pairing UI also looks identical to what you'd see on the current version of the app.

    I was able to start the pairing process with my Forerunner 955 (even though it was released years after that version of the Connect app) - I didn't allow it to complete the setup though.

    Garmin def implemented a pretty nice design where all the device-specific data, logic and UI for pairing seems to be managed on a central server, so you don't necessarily have to update the Connect app just to pair a new device.

    Idk when they started doing this, so it's possible that at one point in the past, maybe you did have to update Connect in order to pair a new device. But I can still see my latest activities in that super old version of Connect, so Garmin hasn't done a bad job of preserving backwards compatibility.

    I also think the use case for centrally fixing bugs is a valid reason to use a central server as opposed to putting the image processing in Connect.

    Another use case could be allowing CIQ apps to use Wi-Fi to retrieve an image rather than bluetooth. (Yes I realize Wi-Fi connectivity for CIQ apps is rare for watches, as wi-fi is only used if wi-fi is already active for some other reason.)