Can’t pair app after reboot (channel mismatch)

Can’t pair app after reboot (channel mismatch)

BY 17 May 2016 Native Application Development
 
 

Hi,

I’ve done a companion app between my Gear S2 and my Samsung S6 phone (running Android 6.01). It’s the same implementation as the “Hello Accessory” example and it runs ok. After I install the app on my phone, everything works correctly (I can send a message from the watch and the app receives it).

But, as soon as I reboot the phone, the watch can’t find the peer (of course, other apps like the Samsung Gear app work fine with the watch). If then I reinstall the app, everything works ok until next reboot.

I’ve checked the logcat and I see this after the reboot (when the pairing doesn’t work). Look specially at the “Remote and Local channel Ids mismatch” (because I’m sure they match):

I/SABtRfConnection: BT Read protocol frame of length: 38
D/SATransportManager: Received a message from accessory ID: 52841
V/SANoAcknowledger: Processing Data Frame for accessory 52841
D/SASessionManager: >> ReceiverDequeTask : processing session id : 1023 priority : 3
V/SAFrameUtils: Application service profile ID: /example/myapp
I/SASessionManager: Received SC req from REMOTE - initiator: 33685 acceptor: 39635 profileId: /example/myapp
W/SACapabilityManager: Channel Size does not match!!
W/SASessionManager: Remote and Local channel Ids mismatch!!
W/SASessionManager: Rejecting service connection from initiator ID: 33685 Acceptor: 39635 profile /example/myapp accessoryId 52841
W/SASessionManager: ConnectionLimit : No entry found for ComponentId: 39635 in the map!
V/SATransportManager: Attempt to enqueue message sessionId: 1023
D/SATransportManager: >> DequeTask : processing session id : 1023 priority : 3
D/SAConnectivityManager: Sending Message - accessoryId: 52841 sessionId: 1023
I/SABtRfConnection: BT Wrote protocol frame of length: 39
D/SATransportManager: onMessageDispatched from accessory ID: 52841 for session :1023
D/SATransportManager: notifying deque task 
I/SATransportManager: Setting PQ to unpaused! Current Size : 0 Current State : 1

Also, it looks that everything starts to work again after reinstall because (not sure about this) my app re-register the service in the Samsung Accessory Framework. Specifically, after reinstalling, everything works after this (logcat):

D/RegisterUponInstallReceiver: Received Resgister after install:com.example.myapp
I/SASdkConfig: Accessory Framework:2.16.125 Accessory SDK:2.3.0
I/ServiceXmlReader: Service description(s) file Location:/res/xml/accessoryservices.xml
D/ServiceXmlReader: Fetching xml from /res/xml
V/ServiceXmlReader: Start document
V/ServiceXmlReader: Start document
I/SAAgent: Agent ID retrieved successfully for com.example.myapp.ProviderServiceAgent ID:58502
I/SARegistrationTask: Services Registered successfully!

Those lines don’t appear when booting.

Where is the problem? As a workaround, could I broadcast a “RegisterUponInstallReceiver” intent or something to force the framework to re-register my app?

Any help is very much welcome!

P.S. I’ve tried to format the post, but I don’t know if it made it more readable or not :/

 
Written by