cagnulein / qdomyos-zwift

Zwift bridge for smart treadmills and bike/cyclette
https://www.qzfitness.com/
GNU General Public License v3.0
385 stars 110 forks source link

[BUG] Wear OS app not staying active #2489

Closed acepilot111 closed 1 month ago

acepilot111 commented 2 months ago

Describe the bug Wear OS app disconnecting

To Reproduce Steps to reproduce the behavior: Recently got a Galaxy Watch 7. Installed the QZ app on it so I can transmit my heart rate to the app on my phone. I can open the app and it auto starts and displays my heart rate. Then if I hurry I can open the app on my phone and it will auto connect to the bike and the app on my watch and properly display the HR in the app for a few seconds. However, once the watch screen turns off, the connection seems to break. The app on my phone displays whatever the HR was when the connection was lost.

One thing I noticed when installing it for the first time was it didnt ask for "all the time" level permissions. Only for while using the app. And I am unable to manually grant that level of permission to the app in the watch settings, at least that I could find. So, my guess is the OS is killing the app as soon as the screen auto turns off. I have also tried to turn on the setting that keeps the display on, but that didnt fix it either.

Expected behavior A clear and concise description of what you expected to happen.

Screenshots If applicable, add screenshots to help explain your problem. N/A

Desktop (please complete the following information):

Smartphone (please complete the following information):

Append a debug log I tried to capture this in the attached log, but not sure if HR or the connection gets logged. debug-Sun_Jul_28_17_16_24_2024.log

Additional context Add any other context about the problem here.

cagnulein commented 2 months ago

Hi, I have the wake lock permission, strange. what's the exact label of the all the time permissions? so i will check on documentation

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno lun 29 lug 2024 alle 00:19 acepilot111 @.***> ha scritto:

Assigned #2489 https://github.com/cagnulein/qdomyos-zwift/issues/2489 to @cagnulein https://github.com/cagnulein.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#event-13672301029, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWHYPRRDTGYD5XUZOILZOVU6BAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTGY3TEMZQGEYDEOI . You are receiving this because you were assigned.Message ID: @.***>

acepilot111 commented 2 months ago

I cleared the data from the qz app in my watch and restarted it. Here are pics of the permissions it asked for. On other apps when this pops up, one option I can pick from is "always". That option wasn't available when picking for the qz app.

Nathan


From: Roberto Viola @.> Sent: Monday, July 29, 2024 12:06:19 AM To: cagnulein/qdomyos-zwift @.> Cc: acepilot111 @.>; Author @.> Subject: Re: [cagnulein/qdomyos-zwift] [BUG] Wear OS app not staying active (Issue #2489)

Hi, I have the wake lock permission, strange. what's the exact label of the all the time permissions? so i will check on documentation

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno lun 29 lug 2024 alle 00:19 acepilot111 @.***> ha scritto:

Assigned #2489 https://github.com/cagnulein/qdomyos-zwift/issues/2489 to @cagnulein https://github.com/cagnulein.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#event-13672301029, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWHYPRRDTGYD5XUZOILZOVU6BAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTGY3TEMZQGEYDEOI . You are receiving this because you were assigned.Message ID: @.***>

— Reply to this email directly, view it on GitHubhttps://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2254953390, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BKFF37EQKW5XA7FTC2LCRCTZOXEUXAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENJUHE2TGMZZGA. You are receiving this because you authored the thread.Message ID: @.***>

cagnulein commented 2 months ago

hi @acepilot111 you have to upload the pictures on the github web interface otherwise I can't see them

acepilot111 commented 2 months ago

1000019374 1000019375

cagnulein commented 2 months ago

i don't think that's about this issue. maybe it's a different permission? can you show me an example of the permissions required from example from strava?

acepilot111 commented 2 months ago

I could be totally wrong thinking this has to do with permission. The only reason I thought that in the first place was because I have attempted to do this same thing with a different app called Bluetooth Heart Rate Monitor (https://play.google.com/store/apps/details?id=com.bmi.hr_monitor&hl=en_US). When I first open that app, it asks for the same permissions, but then warns the user that the "aways" level has not been granted and thus the app wont work. That could be complete BS for all I know, but you can then tap "request permissions" again and the "all the time" option is then available.

Here is a link to a video of how that app requests permissions: https://photos.app.goo.gl/WrAYKMoE7mTAFYzw5

cagnulein commented 2 months ago

hah ok it's about this one https://developer.android.com/health-and-fitness/guides/health-services/background-body-sensors?hl=it

Let me try to add it and let's see if it makes any difference. send me an email to roberto.viola83 at gmail.com indicating this ticket and I will add you to the internal beta in order to test it

cagnulein commented 2 months ago

hi @acepilot111 i checked the logcat that you sent me by email yesterday.

I can see

07-30 15:32:04.368 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@d848393,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:05.337 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@238bb94,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:06.335 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@1d8671,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:07.343 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@cd7113a,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:08.389 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@93162bf,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:09.360 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@e56fc90,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:10.331 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@9abd7fd,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]
07-30 15:32:11.389 18184 18184 D sendHeartRateToPhone: Sending text was successful: DataItemParcelable[@d83cf16,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]

so for these 7 seconds the app was sending HR correctly, at least for its point of view. The last one is also the last line of the log so it seems that you interrupt the log when it was working, correct?

also i'm seeing this

07-30 15:32:04.324 2809 2985 I SHW - HeartRateSensorDailyHr: [createSensorDataList] timestamp:1722371523482, activityType:RESTING, status:OK, heartRate:62

but i can see one time only

and lucky for us I'm seeing something suspicious

07-30 15:32:03.714 18184 18184 E Exercise Sample: Prepare exercise failed - Missing permissions

the stupid thing is that

07-30 15:32:03.632 18184 18184 D Exercise Sample: Checking permissions
07-30 15:32:03.652 18184 18184 I Exercise Sample: All required permissions granted
07-30 15:32:03.652 18184 18184 D Exercise Sample: Preparing an exercise
07-30 15:32:03.714 18184 18184 E Exercise Sample: Prepare exercise failed - Missing permissions
07-30 15:32:03.714 18184 18184 D Exercise Sample: Starting exercise

first it said that it has everything and then that it failed. also I can't find any information about this on internet.

Then I was reading again this https://developer.android.com/health-and-fitness/guides/health-services/background-body-sensors

My english is not so good (i'm italian) but says this:

Caution: If your app requests both body sensor permissions at the same time, the system ignores the request and doesn't grant your app either permission.

so since now i'm requiring both in the code, maybe i have to ask only for the background one?

What do you think?

acepilot111 commented 2 months ago

This actually makes a bit of sense to me based on what happened when you changed the app to ask for background and it broke the whole app. It also makes sense based on the video I sent of how the other Bluetooth heart rate transmitter app asked for permissions.

I think you may need to have your app do the same thing that Bluetooth app did in the video where it first asks for permission only while using the app, and then ask for background activity using a different second prompt.

By asking for background activity right away in 1.1.1, wear os ignores it and denies the permissions all together, thus it can't access the sensor, thus I don't see any pulse on the screen.

Let me know if that makes sense or not. I can try explaining it differently if that doesn't translate to Italian very well.

Again, thank you for taking the time to help get this figured out. I really appreciate it.


From: Roberto Viola @.> Sent: Wednesday, July 31, 2024 2:10:15 AM To: cagnulein/qdomyos-zwift @.> Cc: acepilot111 @.>; Mention @.> Subject: Re: [cagnulein/qdomyos-zwift] [BUG] Wear OS app not staying active (Issue #2489)

hi @acepilot111https://github.com/acepilot111 i checked the logcat that you sent me by email yesterday.

I can see

07-30 15:32:04.368 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:05.337 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:06.335 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:07.343 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:08.389 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:09.360 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:10.331 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz] 07-30 15:32:11.389 18184 18184 D sendHeartRateToPhone: Sending text was successful: @.,dataSz=22, numAssets=0, uri=wear://3fcef58d/qz]

so for these 7 seconds the app was sending HR correctly, at least for its point of view. The last one is also the last line of the log so it seems that you interrupt the log when it was working, correct?

also i'm seeing this

07-30 15:32:04.324 2809 2985 I SHW - HeartRateSensorDailyHr: [createSensorDataList] timestamp:1722371523482, activityType:RESTING, status:OK, heartRate:62

but i can see one time only

and lucky for us I'm seeing something suspicious

07-30 15:32:03.714 18184 18184 E Exercise Sample: Prepare exercise failed - Missing permissions

the stupid thing is that

07-30 15:32:03.632 18184 18184 D Exercise Sample: Checking permissions 07-30 15:32:03.652 18184 18184 I Exercise Sample: All required permissions granted 07-30 15:32:03.652 18184 18184 D Exercise Sample: Preparing an exercise 07-30 15:32:03.714 18184 18184 E Exercise Sample: Prepare exercise failed - Missing permissions 07-30 15:32:03.714 18184 18184 D Exercise Sample: Starting exercise

first it said that it has everything and then that it failed. also I can't find any information about this on internet.

Then I was reading again this https://developer.android.com/health-and-fitness/guides/health-services/background-body-sensors

My english is not so good (i'm italian) but says this:

Caution: If your app requests both body sensor permissions at the same time, the system ignores the request and doesn't grant your app either permission.

so since now i'm requiring both in the code, maybe i have to ask only for the background one?

What do you think?

— Reply to this email directly, view it on GitHubhttps://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2259827768, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BKFF37AIFWHTPJ55BOJUPNLZPCEVPAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENJZHAZDONZWHA. You are receiving this because you were mentioned.Message ID: @.***>

cagnulein commented 2 months ago

I don't think bluetooth requests makes any difference. let's first test asking onlt for background and let's see how it goes. It will be online in 10 minute the version 1.1.2

let me know!

cagnulein commented 2 months ago

also i suggest to reinstall the app since you already granted all the permissions

acepilot111 commented 2 months ago

That change was sort of successful. The app only asked for activity permission and did not ask for sensor permission at all. I first granted "all the time" access and it didnt show a pulse at all. Was back to being broken. Then I cleared the data and granted only "while using app" permission to the sensors in the settings. Then tested the app on the watch and I could see my pulse again. Then I granted "all the time" access and it was still able show a pulse and connected to the app on my phone once it connected to the bike. However, something is still not working in that either the app is freezing in the background or it stops communication with the app on my phone. When my watch screen turns off or goes into power saving mode or something, whatever heart rate was last sent to the app on the phone is what it stays at. It doenst go up or down. Then when I bring my wrist up to turn the watch screen back on or tap it to turn it on, the heart rate on the phone suddenly updates and keeps updating until the screen turns off and then it does it again. I also tried this with "always on display" turned on, but even then the screen dims and eventually goes back to the home face. Then it stops displaying the seconds and thats when the something happens that stops the app on the watch from sending data to the app on my phone. I managed to run a logcat with all that, but I think the cmd window I was using started to drop lines off and some of the log may have been lost. If you cant find any evidence of what I am talking about in the attached log let me know and I can try to capture it again.

QZ Wear OS 7-31-24 0812 Log.txt

cagnulein commented 2 months ago

one question: the Bluetooth Heart Rate Monitor also has the same behaviour during power saving mode?

acepilot111 commented 2 months ago

I normally cant even get that app to show up in QZ on my phone so couldnt really test it, but just now finally got it to connect and show my pulse in the app. And yes, it does the same thing. When the watch screen turns off, a few moments later the pulse on the phone app freezes and stops updating. This has me thinking it is a wear os issue now. That the OS is being too aggressive in pausing apps to save battery even when the user explicitly wants them to keep running in the background.

cagnulein commented 2 months ago

Ok I thought you mentioned that app because it worked on your watch :) As far as i know the only app that works on your watch in power save mode is strava. You can try

cagnulein commented 2 months ago

@acepilot111 Any news with strava?

acepilot111 commented 2 months ago

I used Strava on my watch to monitor a workout this morning and it seemed to record the whole activity just fine, including heart rate. However, the app on my watch doesn't seem to be able to do anything with Bluetooth, so I'm not sure how this test relates to using my watch to broadcast my heart rate.

cagnulein commented 2 months ago

doesn't matter about bluetooth. the communication with bluetooth is ok also in low power mode i assume. the issue is with hr. did you check via adb with strava if there is something useful?

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno mar 6 ago 2024 alle 18:13 acepilot111 @.***> ha scritto:

I used Strava on my watch to monitor a workout this morning and it seemed to record the whole activity just fine, including heart rate. However, the app on my watch doesn't seem to be able to do anything with Bluetooth, so I'm not sure how this test relates to using my watch to broadcast my heart rate.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2271658288, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWAN5YPHA7MLIOOVSQDZQDYZTAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZRGY2TQMRYHA . You are receiving this because you were mentioned.Message ID: @.***>

acepilot111 commented 2 months ago

No, I did not. I will try and do that next.

acepilot111 commented 2 months ago

Finally managed to get the watch re-connected to ADB on my computer and capture the attached log. While logcat was running I opened Strava on the watch, started a generic workout then let the screen go dark. Waited about 20 seconds or so, tapped the screen and saw the timer was at 40 seconds for the workout. Then let it go dark again, waited a bit, then ended the workout, tapped the finish button to save the workout, then ended the logcat.

Watch7StravaLog.txt

cagnulein commented 2 months ago

thanks I will check it tomorrow, 11pm here :)

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno mar 6 ago 2024 alle ore 22:54 acepilot111 < @.***> ha scritto:

Finally managed to get the watch re-connected to ADB on my computer and capture the attached log. While logcat was running I opened Strava on the watch, started a generic workout then let the screen go dark. Waited about 20 seconds or so, tapped the screen and saw the timer was at 40 seconds for the workout. Then let it go dark again, waited a bit, then ended the workout, tapped the finish button to save the workout, then ended the logcat.

Watch7StravaLog.txt https://github.com/user-attachments/files/16515634/Watch7StravaLog.txt

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2272133102, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWCVPSEUW5GLJ5AOOSTZQEZXHAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZSGEZTGMJQGI . You are receiving this because you were mentioned.Message ID: @.***>

cagnulein commented 2 months ago

Checked and I made some changes. I will check on my old wearos device if it's working this evening and I will let you know

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno mar 6 ago 2024 alle ore 22:55 cagnulein @.***> ha scritto:

thanks I will check it tomorrow, 11pm here :)

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno mar 6 ago 2024 alle ore 22:54 acepilot111 < @.***> ha scritto:

Finally managed to get the watch re-connected to ADB on my computer and capture the attached log. While logcat was running I opened Strava on the watch, started a generic workout then let the screen go dark. Waited about 20 seconds or so, tapped the screen and saw the timer was at 40 seconds for the workout. Then let it go dark again, waited a bit, then ended the workout, tapped the finish button to save the workout, then ended the logcat.

Watch7StravaLog.txt https://github.com/user-attachments/files/16515634/Watch7StravaLog.txt

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2272133102, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWCVPSEUW5GLJ5AOOSTZQEZXHAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZSGEZTGMJQGI . You are receiving this because you were mentioned.Message ID: @.***>

cagnulein commented 2 months ago

ok @acepilot111 good news (at least from my side). The patch that I did seems to work perfectly on my fossil wear os. It works also when qz on the watch is not on foreground and of course even if the display is completely turned off. Let me know when you will try

cagnulein commented 2 months ago

wait i guess i saw the issue: after 3 minutes the watch is still getting the HR but it's not sending it anymore via bluetooth. Let me try to fix this as well

cagnulein commented 2 months ago

ok fixed @acepilot111 i hope it will work on yours too! version 1.1.4 on wearos

bigdbag commented 2 months ago

Just tested @cagnulein on watch 7, watch app immediately closes upon opening it. accepted one permission after installation. don't have time for more now, will look up how to get a log output from the watch later if i have time today.

cagnulein commented 2 months ago

ok unfortunately without having the same watch it's impossible to test this. on simulator and my watch works perfectly :(

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno mer 7 ago 2024 alle 23:04 bigdbag @.***> ha scritto:

Just tested @cagnulein https://github.com/cagnulein on watch 7, watch app immediately closes upon opening it. accepted one permission after installation. don't have time for more now, will look up how to get a log output from the watch later if i have time today.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2274344727, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWA65A4UYJF54PQTULTZQKDWRAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZUGM2DINZSG4 . You are receiving this because you were mentioned.Message ID: @.***>

acepilot111 commented 2 months ago

I just got 1.1.4 installed on my watch and can confirm bigdbag's experience is the same as mine. The app first asked for activity permissions, I allowed access and then the app just crashed. I thought the crash might have something to do with permissions since it never asked for sensor permissions, so I manually granted "While using app" permissions to sensors via settings, closed settings and re-opened the app, then it asked for "all the time" access to sensors so I granted access. And the app still just crashes when opened. I will try and get a log via ADB here in a few minutes.

cagnulein commented 2 months ago

Ok, thanks for the update. maybe it's something stupid. i'm going to bed. i will check the crash tomorrow if you can upload the log. thanks

Il giorno mer 7 ago 2024 alle 23:12 acepilot111 @.***> ha scritto:

I just got 1.1.4 installed on my watch and can confirm bigdbag's experience is the same as mine. The app first asked for activity permissions, I allowed access and then the app just crashed. I thought the crash might have something to do with permissions since it never asked for sensor permissions, so I manually granted "While using app" permissions to sensors via settings, closed settings and re-opened the app, then it asked for "all the time" access to sensors so I granted access. And the app still just crashes when opened. I will try and get a log via ADB here in a few minutes.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2274356107, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWFNMIGHRFUNW6EVOTTZQKETHAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZUGM2TMMJQG4 . You are receiving this because you were mentioned.Message ID: @.***>

acepilot111 commented 2 months ago

Managed to get adb to connect way easier than yesterday. Here is a log. I tried to open it 4 times while logcat was running. Hope there is something helpful in there.

QZ Wear OS 08-07-24 1614 Log.txt

cagnulein commented 2 months ago

ok perfect should be an easy one tomorrow

FATAL EXCEPTION: main
08-07 16:14:11.762 17807 17807 E AndroidRuntime: Process: org.cagnulen.qdomyoszwift, PID: 17807
08-07 16:14:11.762 17807 17807 E AndroidRuntime: java.lang.RuntimeException: Unable to start service org.cagnulen.qdomyoszwift.HeartRateService@123bc41 with Intent { cmp=org.cagnulen.qdomyoszwift/.HeartRateService }: android.app.MissingForegroundServiceTypeException: Starting FGS without a type  callerApp=ProcessRecord{709d133 17807:org.cagnulen.qdomyoszwift/u0a205} targetSDK=34
08-07 16:14:11.762 17

indeed on my watch isn't required

cagnulein commented 2 months ago

@acepilot111 @bigdbag sent an update. let me know if it's better

acepilot111 commented 2 months ago

Got 1.1.5 installed. Still crashing.

QZ Wear OS 08-08-24 0543 Log.txt

cagnulein commented 2 months ago

08-08 05:43:14.380 3969 3969 E AndroidRuntime: java.lang.RuntimeException: Unable to start service @.*** with Intent { cmp=org.cagnulen.qdomyoszwift/.HeartRateService (has extras) }: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{d00b171 3969:org.cagnulen.qdomyoszwift/u0a207} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory]

got it. let me tro fix this

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno gio 8 ago 2024 alle ore 12:45 acepilot111 < @.***> ha scritto:

Got 1.1.5 installed. Still crashing.

QZ Wear OS 08-08-24 0543 Log.txt https://github.com/user-attachments/files/16541845/QZ.Wear.OS.08-08-24.0543.Log.txt

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2275512197, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWFAYF7R3GWWPVSRZMLZQND3LAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZVGUYTEMJZG4 . You are receiving this because you were mentioned.Message ID: @.***>

acepilot111 commented 2 months ago

Right below that one there is also a security exception...

08-08 05:43:13.120 3896 3896 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:895) 08-08 05:43:13.120 3896 3896 E AndroidRuntime: Caused by: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{9ac670e 3896:org.cagnulen.qdomyoszwift/u0a207} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 05:43:13.120 3896 3896 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:3195)

Probably the same thing for all I know, but I wanted to call it out just in case it give more clues.

cagnulein commented 2 months ago

1.1.6 pushed of course i can't test it myself, so i hope it will work out thanks for the feedbacks

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno gio 8 ago 2024 alle ore 12:50 acepilot111 < @.***> ha scritto:

Right below that one there is also a security exception...

08-08 05:43:13.120 3896 3896 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:895) 08-08 05:43:13.120 3896 3896 E AndroidRuntime: Caused by: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{9ac670e 3896:org.cagnulen.qdomyoszwift/u0a207} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 05:43:13.120 3896 3896 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:3195)

Probably the same thing for all I know, but I wanted to call it out just in case it give more clues.

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2275521926, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWFMSEKFDZOMKSKMSLDZQNEQLAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZVGUZDCOJSGY . You are receiving this because you were mentioned.Message ID: @.***>

acepilot111 commented 2 months ago

Verified 1.1.6 is installed. Still crashing.

QZ Wear OS 08-08-24 0815.txt

08-08 08:13:14.231 13740 13740 D AndroidRuntime: Shutting down VM 08-08 08:13:14.231 13740 13740 E AndroidRuntime: FATAL EXCEPTION: main 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Process: org.cagnulen.qdomyoszwift, PID: 13740 08-08 08:13:14.231 13740 13740 E AndroidRuntime: java.lang.RuntimeException: Unable to start service org.cagnulen.qdomyoszwift.HeartRateService@123bc41 with Intent { cmp=org.cagnulen.qdomyoszwift/.HeartRateService (has extras) }: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{195f83 13740:org.cagnulen.qdomyoszwift/u0a210} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5134) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2466) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:256) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Looper.loop(Looper.java:341) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8695) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:895) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Caused by: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{195f83 13740:org.cagnulen.qdomyoszwift/u0a210} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false[android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:3195) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.createException(Parcel.java:3179) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3162) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3104) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7123) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.Service.startForeground(Service.java:863) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at androidx.core.app.ServiceCompat$Api34Impl.startForeground(ServiceCompat.java:241) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at androidx.core.app.ServiceCompat.startForeground(ServiceCompat.java:172) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at org.cagnulen.qdomyoszwift.HeartRateService.onStartCommand(HeartRateService.kt:48) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5116) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: ... 9 more 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Caused by: android.os.RemoteException: Remote stack trace: 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2872) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2560) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1836) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14688) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3570) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: 08-08 08:13:14.238 795 7266 V WindowManager: Relayout Window{ab79c4 u0 Splash Screen org.cagnulen.qdomyoszwift}: viewVisibility=8 req=480x480 ty=3 d0 08-08 08:13:14.239 1070 1070 W SysUI : [SecSysUiBaseActivity] onStop(256) > [SysUiActivity] before onStop(). 08-08 08:13:14.241 795 1386 D Debug : low && ship && 3rdparty app crash, do not dump 08-08 08:13:14.241 795 1386 W ActivityTaskManager: Force finishing activity org.cagnulen.qdomyoszwift/.MainActivity

cagnulein commented 2 months ago

Did you allow the new Bluetooth permission?

Roberto Viola Software engineer and open source enthusiast http://robertoviola.cloud

Il giorno gio 8 ago 2024 alle 15:26 acepilot111 @.***> ha scritto:

Verified 1.1.6 is installed. Still crashing.

QZ Wear OS 08-08-24 0815.txt https://github.com/user-attachments/files/16548595/QZ.Wear.OS.08-08-24.0815.txt

08-08 08:13:14.231 13740 13740 D AndroidRuntime: Shutting down VM 08-08 08:13:14.231 13740 13740 E AndroidRuntime: FATAL EXCEPTION: main 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Process: org.cagnulen.qdomyoszwift, PID: 13740 08-08 08:13:14.231 13740 13740 E AndroidRuntime: java.lang.RuntimeException: Unable to start service @.*** with Intent { cmp=org.cagnulen.qdomyoszwift/.HeartRateService (has extras) }: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{195f83 13740:org.cagnulen.qdomyoszwift/u0a210} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false [android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5134) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2466) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:107) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:256) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Looper.loop(Looper.java:341) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8695) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:895) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Caused by: java.lang.SecurityException: Starting FGS with type connectedDevice callerApp=ProcessRecord{195f83 13740:org.cagnulen.qdomyoszwift/u0a210} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE] any of the permissions allOf=false[android.permission.BLUETOOTH_ADVERTISE, android.permission.BLUETOOTH_CONNECT, android.permission.BLUETOOTH_SCAN, android.permission.CHANGE_NETWORK_STATE, android.permission.CHANGE_WIFI_STATE, android.permission.CHANGE_WIFI_MULTICAST_STATE, android.permission.NFC, android.permission.TRANSMIT_IR, android.permission.UWB_RANGING, USB Device, USB Accessory] 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:3195) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.createException(Parcel.java:3179) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3162) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:3104) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7123) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.Service.startForeground(Service.java:863) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at androidx.core.app.ServiceCompat$Api34Impl.startForeground(ServiceCompat.java:241) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at androidx.core.app.ServiceCompat.startForeground(ServiceCompat.java:172) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at org.cagnulen.qdomyoszwift.HeartRateService.onStartCommand(HeartRateService.kt:48) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5116) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: ... 9 more 08-08 08:13:14.231 13740 13740 E AndroidRuntime: Caused by: android.os.RemoteException: Remote stack trace: 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2872) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2560) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1836) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14688) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3570) 08-08 08:13:14.231 13740 13740 E AndroidRuntime: 08-08 08:13:14.238 795 7266 V WindowManager: Relayout Window{ab79c4 u0 Splash Screen org.cagnulen.qdomyoszwift}: viewVisibility=8 req=480x480 ty=3 d0 08-08 08:13:14.239 1070 1070 W SysUI : [SecSysUiBaseActivity] onStop(256)

[SysUiActivity] before onStop(). 08-08 08:13:14.241 795 1386 D Debug : low && ship && 3rdparty app crash, do not dump 08-08 08:13:14.241 795 1386 W ActivityTaskManager: Force finishing activity org.cagnulen.qdomyoszwift/.MainActivity

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2275823908, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWG6QTAL2KGDY4FLJK3ZQNWWZAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZVHAZDGOJQHA . You are receiving this because you were mentioned.Message ID: @.***>

cagnulein commented 2 months ago

@acepilot111 i just pushed a new one that should ask for the new permission before crashing. It should help. In the meantime, with the help of @bigdbag (thanks again!) I'm trying to put my hands on a Galaxy Watch too

acepilot111 commented 2 months ago

Sorry I didn't mention it, but yes. On the 1.1.6 version I approved what the app asked for. It still didnt outright ask for sensor permissions from what I remember though. I manually allowed "when using app" via setting, then opened the app again and it asked for permissions again and then I selected "all the time". Then it crashed.

cagnulein commented 2 months ago

don't you have the enable also the nearby devices permission? it's a new one. anyway in this new version i forbidly asked. In the meantime i'm checking if there is something else left

acepilot111 commented 2 months ago

On 1.1.6 it did explicitly ask for nearby device permission and I granted it.

cagnulein commented 2 months ago

ok so the adb log it's after it? it's so strange it says the also the bluetooth_connect (nearby devices is not selected). let me set all of them

cagnulein commented 2 months ago

@acepilot111 I just pushed the 1.1.8 with new permissions in the manifest, let's see if it helps. It's unbeliavable that with the official android tools i can't see this issue!

acepilot111 commented 2 months ago

Got 1.1.8 installed. Good progress this time. Upon opening it asks for activity permission, then nearby device permission, then sensor permission. Then once the permissions are all approved it stays open and doesn't crash, but initially acts like it doesn't have sensor permissions with a pulse of 0. But if I hit the bottom button or swipe from left to right to "go back" something restarts and the app begins to show a pulse. It still didn't ask for sensor permissions a second time though for the user to easily grant all the time access. I still did it via settings after the fact and it did the same thing. Not sure if it is able to communicate with the phone app yet and I am not near a bike to test. Will try that this evening and report back.

In case you want it, here is a log of me opening the app for the first time, granting each permission, then manually granting all the time sensor permissions in settings and then swiping left to right in the app for it to show a pulse.

QZ Wear OS 08-08-24 1253.txt

cagnulein commented 2 months ago

Awesome, thanks for the update! yes you should be able to communicate with the phone! i will check the log later today, just came back from my running session Let me know!

Il giorno gio 8 ago 2024 alle 20:03 acepilot111 @.***> ha scritto:

Got 1.1.8 installed. Good progress this time. Upon opening it asks for activity permission, then nearby device permission, then sensor permission. Then once the permissions are all approved it stays open and doesn't crash, but initially acts like it doesn't have sensor permissions with a pulse of

  1. But if I hit the bottom button or swipe from left to right to "go back" something restarts and the app begins to show a pulse. It still didn't ask for sensor permissions a second time though for the user to easily grant all the time access. I still did it via settings after the fact and it did the same thing. Not sure if it is able to communicate with the phone app yet and I am not near a bike to test. Will try that this evening and report back.

In case you want it, here is a log of me opening the app for the first time, granting each permission, then manually granting all the time sensor permissions in settings and then swiping left to right in the app for it to show a pulse.

QZ Wear OS 08-08-24 1253.txt https://github.com/user-attachments/files/16551775/QZ.Wear.OS.08-08-24.1253.txt

— Reply to this email directly, view it on GitHub https://github.com/cagnulein/qdomyos-zwift/issues/2489#issuecomment-2276378691, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAALYWH4OLYGP54TGI7TZMDZQOXFPAVCNFSM6AAAAABLTE66OWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENZWGM3TQNRZGE . You are receiving this because you were mentioned.Message ID: @.***>

cagnulein commented 2 months ago

@acepilot111 if you want and you have time, you can also try without the bike, enabling the fake device in the experimental settings in QZ.

acepilot111 commented 2 months ago

Ahh, that's good to know. Didn't know that was an option. Thank you for pointing that out.

Using that setting I performed a few tests and it seems to be working. First few tests it still seemed to have issues where the phone app stopped getting info from the watch app once the watch screen turned off. However, I then went to capture a log from both the phone and watch so you could get info from both ends, and it worked perfectly. The phone kept getting a pulse from the watch long after the screen turned off. So, we have at least one case where it worked completely as expected. Oh, and I did NOT grant all the time permissions for the sensors via settings on the successful test either. I cleared the app's data after the first few tests, opened it and only granted the permissions it asked for and that was when it worked perfectly. I will try to use it for a legit workout tomorrow morning and report back on if I have any issues or not.

Just in case you want the logs for the successful test, here is the phone app log: debug-Thu_Aug_8_13_51_55_2024.log

And here is the watch log: QZ Wear OS 08-08-24 1353.txt

Thank you again for being so diligent in helping get this to work. I haven't ever worked directly with an app developer before, but you set the bar really high. I am very impressed.

cagnulein commented 2 months ago

that's an amazing news! and I double your compliments to you because finding someone that can debug the issue in this way is not easy to find in the internet world :)

I'm really curious to know how the workout will go! Finger crossed!

bigdbag commented 2 months ago

Can confirm latest works. Granted all permissions it asked for. I didn't actually work out so I only know that it's been working for about 60 seconds. Will be spinning for around 2 hours tonight so I'll post back here if it stays alive and updated the entire ride!

@cagnulein should I still be setting the watch to always on display? That is necessary yes?