Meshtastic-Android icon indicating copy to clipboard operation
Meshtastic-Android copied to clipboard

[Bug]: General bluetooth issues - parent ticket

Open DaneEvans opened this issue 3 months ago • 15 comments

Parent ticket

App Version

.35 +

Code of Conduct

  • [x] I agree to follow this project's Code of Conduct

DaneEvans avatar Sep 07 '25 00:09 DaneEvans

I habe inconsistent BLE connections on Android using

Release v2.7.0-closed.1

and firmware 2.6.11

shalberd avatar Sep 11 '25 08:09 shalberd

@shalberd That is lacking in usefulness enough to get you removed from closed. Symptoms, logs, hardware spec are the bare minimum.

DaneEvans avatar Sep 11 '25 09:09 DaneEvans

That is lacking in usefulness enough to get you removed from closed

the ticket is not closed ... well, I did get removed / kicked off Bluetooth randomly when using Android App v2.7.-closed.1.

However, now, using the latest build release https://github.com/meshtastic/Meshtastic-Android/releases/tag/v2.7.0-closed.2 from today, no more BLE issues.

Looks like BLE connectivity parts are a bit related the the latest builds being a rush job, which is ok. Just wanted to say: issue no longer occuring for me, I can move out of BLE range, get back in, now I get reconnected, no issues.

shalberd avatar Sep 11 '25 10:09 shalberd

@shalberd you aren't part of the test group. Downloading unreleased test builds will lead to instability due to the nature of development. Don't do that if you want stable.

jamesarich avatar Sep 11 '25 10:09 jamesarich

I never expected perfection, just wanted to give feedback, never mind ... no hard feelings from my side

shalberd avatar Sep 11 '25 10:09 shalberd

@shalberd Sorry, I just assumed that if you were on that build, you were in the 'closed testing' group rather than grabbing it yourself. We appreciate the feedback, but we need details, especially with these longer fix bugs, and even more so if you are on the test builds. The reason we've gone to closed groups is to try and get more specific feedback, and less "This doesn't work"

DaneEvans avatar Sep 11 '25 14:09 DaneEvans

Saw my report was closed and I was directed here (thought mine was more of an app issue than a bluetooth one). I wanted to update that the issue I was having is not happening on 2.7.1 of the app with any device.

ZerdaFawkes avatar Oct 15 '25 19:10 ZerdaFawkes

Saw my report was closed and I was directed here (thought mine was more of an app issue than a bluetooth one). I wanted to update that the issue I was having is not happening on 2.7.1 of the app with any device.

this is a parent ticket for overall app bt issues, which yours counts as 🤷 , we don't need duplicate tickets for same root cause.

jamesarich avatar Oct 15 '25 20:10 jamesarich

Saw my report was closed and I was directed here (thought mine was more of an app issue than a bluetooth one). I wanted to update that the issue I was having is not happening on 2.7.1 of the app with any device.

this is a parent ticket for oveall app bt issues, which yours counts as 🤷 , we don't need duplicate tickets for same root cause.

Understandable, apologies.

ZerdaFawkes avatar Oct 15 '25 20:10 ZerdaFawkes

Android app never reconnects to a node unless force-closed.

STR

  1. Connect to a node via BLE.
  2. Go away from the node until the app shows the node as disconnected.
  3. Walk back to the node.

The app never reconnects to the node, even if you click on it in the nodes list. It must be force-closed and restarted to reconnect.

Android log shows:

I/bt_stack(21209): [INFO:btm_ble_bgconn.cc(429)] Already connection initiated (or) No Pending connections(or) Resources of lcb are exhausted and E/bt_btm(21209): btm_ble_read_remote_features_complete: failed for handle: 0x0009, status 0x3e

Android 13, app v2.7.4 (29319275) google.

1nv avatar Oct 24 '25 15:10 1nv

2.7.7 (29319413) google

Drops the connection again.

I cant makeout a pattern. It stays sometime for 20 minutes, sometimes it drops it after 2 to 5 minutes and so on. Different devices (Heltec V3, Tpager, Tdeck, T114), the same on all of them. different FW versions, 2.7.13 - 2.7.15.

edit

I also notices the BL strengt show allways a bad reception now. The devices sit on the same table.

Slasher006 avatar Nov 19 '25 10:11 Slasher006

👀 https://github.com/NordicSemiconductor/Kotlin-BLE-Library/pull/242

jamesarich avatar Nov 21 '25 13:11 jamesarich

I have a Huawei Mate 10 Pro running Android 12. Meshtastic Android APK version 2.75 works fine with Bluetooth.

But versions 2.76 and 2.77 do not work with any device — neither Heltec nor SenseCAP T1000E.

So I reinstalled the older 2.75 APK, and luckily sideloading still works on Android. That was the only solution. I tried everything: removing devices, deleting the app, reinstalling — nothing helped. The beta version also doesn’t work with Bluetooth or IP.

Sadly, my Meshtastic devices are useless without Bluetooth, unless I use a USB-C cable from the Heltec to my phone.

You’re doing a great job, but Bluetooth is very important because most devices depend on it. I hope you can find a solution and make it work again.

Knud ;O)

dk98174003 avatar Nov 25 '25 07:11 dk98174003

Here are some logs from my Pixel 7a running android 16 with Meshtastic 2.7.7 (29319424) during the time where the app would not connect to my T1000-E. I have the same issue on my Pixel 9a with the same android/version. Rolling meshtastic back to 2.7.5 works. As mentioned in #3812:

Adb log (meshtastic only):

11-25 13:52:43.785  1665  1769 V WindowManager:         {WCT{RemoteToken{c155b39 Task{55cebb8 #1000008 type=standard A=1010275:com.geeksville.mesh}}} m=TO_BACK f=NONE leash=Surface(name=Task=1000008)/@0x701983 sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1},
11-25 13:52:43.824  1665  3662 D CoreBackPreview: Window{8beb2e8 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@94bd120, mPriority=-1, mIsAnimationCallback=false, mOverrideBehavior=0}
11-25 13:52:46.051  1665  2311 W PackageConfigPersister: App-specific configuration not found for packageName: com.geeksville.mesh and userId: 10
11-25 13:52:47.385  1665  3670 I ActivityManager: Force stopping com.geeksville.mesh appid=10275 user=10: from pid 5591 (com.android.settings)
11-25 13:52:47.388  1665  3670 I ActivityManager: Killing 13389:com.geeksville.mesh/u10a275 (adj 50): stop com.geeksville.mesh due to from pid 5591 (com.android.settings)
11-25 13:52:47.393  1665  3670 W ForegroundServiceTypeLoggerModule: Logger should be tracking FGS types correctly for UID 1010275 in package com.geeksville.mesh
11-25 13:52:47.393  1665  3670 W ForegroundServiceTypeLoggerModule: Logger should be tracking FGS types correctly for UID 1010275 in package com.geeksville.mesh
11-25 13:52:47.393  1665  3670 W ForegroundServiceTypeLoggerModule: Logger should be tracking FGS types correctly for UID 1010275 in package com.geeksville.mesh
11-25 13:52:47.393  1665  3670 W ForegroundServiceTypeLoggerModule: Logger should be tracking FGS types correctly for UID 1010275 in package com.geeksville.mesh
11-25 13:52:47.394  1665  3670 W ActivityTaskManager: Force removing ActivityRecord{242912795 u10 com.geeksville.mesh/.MainActivity t1000008 f}}: app died, no saved state
11-25 13:52:47.396  1665  1944 W UsageStatsService: Unexpected activity event reported! (com.geeksville.mesh/com.geeksville.mesh.MainActivity event : 23 instanceId : 11705745)
11-25 13:52:47.409  1665  3670 I AppsFilter: interaction: PackageSetting{81f43d4 com.google.android.microdroid.empty_payload/10291} -> PackageSetting{4595a51 com.geeksville.mesh/10275} BLOCKED
11-25 13:52:47.470  1665  1975 V ActivityManager: Got obituary of 13389:com.geeksville.mesh
11-25 13:52:49.837  1665  2509 V WindowManager: DesktopModeLaunchParamsModifier: phase= 0 task=null activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity desktop mode is not enabled, skipping
11-25 13:52:49.837  1665  2509 V WindowManager: TaskLaunchParamsModifier:phase=0 task=null activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity t-1} display-from-option=0 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@45653668
11-25 13:52:49.837  1665  2509 V WindowManager: DesktopModeLaunchParamsModifier: phase= 3 task=null activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity t-1} desktop mode is not enabled, skipping
11-25 13:52:49.838  1665  2509 V WindowManager: TaskLaunchParamsModifier:phase=3 task=null activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity t-1} display-from-option=0 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@45653668 inherit-from-source=fullscreen non-freeform-task-display-area display-area=DefaultTaskDisplayArea@45653668 default-portrait freeform-size-mismatch=Rect(272, 665 - 808, 1745)
11-25 13:52:49.840  1665  2509 V WindowManager: DesktopModeLaunchParamsModifier: phase= 3 task=Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh} activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity t-1} desktop mode is not enabled, skipping
11-25 13:52:49.840  1665  2509 V WindowManager: TaskLaunchParamsModifier:phase=3 task=Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh} activity=ActivityRecord{215051666 u10 com.geeksville.mesh/.MainActivity t-1} display-from-option=0 display-id=0 task-display-area-windowing-mode=1 suggested-display-area=DefaultTaskDisplayArea@45653668 inherit-from-source=fullscreen non-freeform-task-display-area display-area=DefaultTaskDisplayArea@45653668 default-portrait freeform-size-mismatch=Rect(272, 665 - 808, 1745)
11-25 13:52:49.844  1665  2509 I ActivityTaskManager: START u10 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 xflg=0x4 cmp=com.geeksville.mesh/.MainActivity bnds=[560,1324][776,1588]} with LAUNCH_SINGLE_TOP from uid 1010204 (com.google.android.apps.nexuslauncher) (sr=66785247) (BAL_ALLOW_VISIBLE_WINDOW) result code=0
11-25 13:52:49.844  2114  2138 V WindowManagerShell: Transition requested (#83): android.os.BinderProxy@d1749a9 TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=10 taskId=1000010 effectiveUid=1010275 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.geeksville.mesh/.MainActivity } baseActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} topActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} origActivity=null realActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} numActivities=1 lastActiveTime=14365340 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.os.BinderProxy@d120b2e} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 118 - 0, 0) topActivityInfo=ActivityInfo{3aaf6cf com.geeksville.mesh.MainActivity} launchCookies=[android.os.BinderProxy@a18585c] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(272, 665 - 808, 1745) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@a71d765, appThread = android.app.IApplicationThread$Stub$Proxy@f37ac3a, debugName = QuickstepLaunch }, displayChange = null, flags = 0, debugId = 83 }
11-25 13:52:49.850  1665  3966 I AppsFilter: interaction: PackageSetting{81f43d4 com.google.android.microdroid.empty_payload/10291} -> PackageSetting{a724ab7 com.geeksville.mesh/10275} BLOCKED
11-25 13:52:49.867  1665  1795 I ActivityManager: Start proc 6323:com.geeksville.mesh/u10a275 for next-top-activity {com.geeksville.mesh/com.geeksville.mesh.MainActivity}
11-25 13:52:49.868  1665  1769 V WindowManager: Sent Transition (#83) createdAt=11-25 13:52:49.837 via request=TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=10 taskId=1000010 effectiveUid=1010275 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.geeksville.mesh/.MainActivity } baseActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} topActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} origActivity=null realActivity=ComponentInfo{com.geeksville.mesh/com.geeksville.mesh.MainActivity} numActivities=1 lastActiveTime=14365340 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{fabada8 Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 118 - 0, 0) topActivityInfo=ActivityInfo{2f250c1 com.geeksville.mesh.MainActivity} launchCookies=[android.os.BinderProxy@c0d6066] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isTopActivityNoDisplay=false isSleeping=false locusId=null displayAreaFeatureId=1 isTopActivityTransparent=false isActivityStackTransparent=false lastNonFullscreenBounds=Rect(272, 665 - 808, 1745) capturedLink=null capturedLinkTimestamp=0 requestedVisibleTypes=-9 topActivityRequestOpenInBrowserEducationTimestamp=0 appCompatTaskInfo=AppCompatTaskInfo { topActivityInSizeCompat=false eligibleForLetterboxEducation= false isLetterboxEducationEnabled= false isLetterboxDoubleTapEnabled= false eligibleForUserAspectRatioButton= false topActivityBoundsLetterboxed= false isFromLetterboxDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 topActivityAppBounds=Rect(0, 0 - 1080, 2400) isUserFullscreenOverrideEnabled=false isSystemFullscreenOverrideEnabled=false hasMinAspectRatioOverride=false topActivityLetterboxBounds=null cameraCompatTaskInfo=CameraCompatTaskInfo { freeformCameraCompatMode=inactiveundefined} topNonResizableActivityAspectRatio=-1.0} topActivityMainWindowFrame=null isAppBubble=false}, pipChange = null, remoteTransition = RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@de1fc54, appThread = android.app.IApplicationThread$Stub$Proxy@11237fd, debugName = QuickstepLaunch }, displayChange = null, flags = 0, debugId = 83 }
11-25 13:52:49.868  1665  1769 V WindowManager:         {WCT{RemoteToken{fabada8 Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh}}} m=OPEN f=NONE leash=Surface(name=Task=1000010)/@0x3aa949a sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1},
11-25 13:52:49.994  1665  2308 I ActivityManager: Background started FGS: Allowed [callingPackage: com.geeksville.mesh; callingUid: 1010275; uidState: TOP ; uidBFSL: [BFSL]; intent: Intent { xflg=0x4 cmp=com.geeksville.mesh/.service.MeshService }; code:PROC_STATE_TOP; tempAllowListReason:<null>; allowWiu:12; targetSdkVersion:36; callerTargetSdkVersion:36; startForegroundCount:0; bindFromPackage:null: isBindService:false]
11-25 13:52:50.051  1665  3966 I ActivityManager: Background started FGS: Allowed [callingPackage: com.geeksville.mesh; callingUid: 1010275; uidState: TOP ; uidBFSL: [BFSL]; intent: Intent { xflg=0x4 cmp=com.geeksville.mesh/.service.MeshService }; code:PROC_STATE_TOP; tempAllowListReason:<null>; allowWiu:12; targetSdkVersion:36; callerTargetSdkVersion:36; startForegroundCount:0; bindFromPackage:null: isBindService:true]
11-25 13:52:50.056  1665  2311 D CoreBackPreview: Window{ad67b67 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@5aab4e0, mPriority=-1, mIsAnimationCallback=false, mOverrideBehavior=0}
11-25 13:52:50.293  1665  2311 W PackageConfigPersister: App-specific configuration not found for packageName: com.geeksville.mesh and userId: 10
11-25 13:52:51.062  1665  2311 D CoreBackPreview: Window{ad67b67 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@aab59d2, mPriority=0, mIsAnimationCallback=true, mOverrideBehavior=0}
11-25 13:53:21.973  1665  3662 D CoreBackPreview: Window{ad67b67 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@68fda1a, mPriority=-1, mIsAnimationCallback=false, mOverrideBehavior=0}
11-25 13:53:25.045  1665  2309 D CoreBackPreview: Window{ad67b67 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@1781a54, mPriority=0, mIsAnimationCallback=true, mOverrideBehavior=0}
11-25 13:53:25.095  1665  1769 V WindowManager:         {WCT{RemoteToken{fabada8 Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh}}} m=TO_FRONT f=NONE p=WCT{RemoteToken{1344002 DefaultTaskDisplayArea@45653668}} leash=Surface(name=Task=1000010)/@0x3aa949a sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1},
11-25 13:53:25.206  1665  3663 W PackageConfigPersister: App-specific configuration not found for packageName: com.geeksville.mesh and userId: 10
11-25 13:53:26.115  1665  1769 V WindowManager:         {WCT{RemoteToken{fabada8 Task{57a5363 #1000010 type=standard A=1010275:com.geeksville.mesh}}} m=TO_BACK f=NONE leash=Surface(name=Task=1000010)/@0x3aa949a sb=Rect(0, 0 - 1080, 2400) eb=Rect(0, 0 - 1080, 2400) epz=Point(1080, 2400) d=0 taskParent=-1 winMode=1},
11-25 13:53:26.151  1665  3670 D CoreBackPreview: Window{ad67b67 u10 com.geeksville.mesh/com.geeksville.mesh.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@693e2d1, mPriority=-1, mIsAnimationCallback=false, mOverrideBehavior=0}

Meshtastic app logs:

meshtastic_debug_20251125_135643.txt

Adb logs (whole log, not filtered to meshtastic):

adb-logs-all.txt

dpedu avatar Nov 25 '25 19:11 dpedu

👀 NordicSemiconductor/Kotlin-BLE-Library#242

This is coming in 2.7.8 - no promises, but it might solve the issue

DaneEvans avatar Nov 26 '25 11:11 DaneEvans