particle-iot / particle-android

Particle Open Source for Android
Apache License 2.0
37 stars 38 forks source link

Device setup: Fail to send device commands after connecting to Wi-Fi on Android 12+ #111

Open markoImake opened 1 year ago

markoImake commented 1 year ago

If your app targets sdk 31 and above, the device setup process is not working anymore. It fails after you connect to the device AP, at the point where it is trying to send a device command to get the device ID.

Tested with latest particle repo code, using Pixel 6a running Android 13. If you build the project using targetSdk 30 it works fine as before (same as production version of particle app on play store). But if you change the targetSdk to 31 (or 32/33), the issue occurs.

Might be related to changes in Android 12 - https://developer.android.com/about/versions/12/behavior-changes-12#concurrent-connections

See video showing behaviour when target sdk 31+ https://drive.google.com/file/d/10-BuJg1R71d3_qY8rlUo--bFdv0wqPJe/view?usp=share_link

See console logs during setup process below.

I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onAvailable: 139 D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onCapabilitiesChanged: 139, caps: [ Transports: WIFI Capabilities: NOT_METERED&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=72000Kbps LinkDnBandwidth>=72000Kbps TransportInfo: <SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00, IP: /192.168.0.2, Security type: 0, Supplicant state: COMPLETED, Wi-Fi standard: 4, RSSI: -127, Link speed: -1Mbps, Tx Link speed: -1Mbps, Max Supported Tx Link speed: 72Mbps, Rx Link speed: -1Mbps, Max Supported Rx Link speed: 72Mbps, Frequency: 2462MHz, Net ID: -1, Metered hint: false, score: 0, isUsable: true, CarrierMerged: false, SubscriptionId: -1, IsPrimary: -1, Trusted: true, Restricted: false, Ephemeral: true, OEM paid: false, OEM private: false, OSU AP: false, FQDN: , Provider friendly name: , Requesting package name: io.particle.android.appMLO Information: , AP MLD Address: , AP MLO Link Id: , AP MLO Affiliated links: > UnderlyingNetworks: Null] I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onLinkPropertiesChanged: 139 I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onBlockedStatusChanged: 139, blocked=false I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onCapabilitiesChanged: 139, caps: [ Transports: WIFI Capabilities: NOT_METERED&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=10000Kbps LinkDnBandwidth>=10000Kbps TransportInfo: <SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00, IP: /192.168.0.2, Security type: 0, Supplicant state: COMPLETED, Wi-Fi standard: 4, RSSI: -69, Link speed: 58Mbps, Tx Link speed: 58Mbps, Max Supported Tx Link speed: 72Mbps, Rx Link speed: 72Mbps, Max Supported Rx Link speed: 72Mbps, Frequency: 2462MHz, Net ID: -1, Metered hint: false, score: 0, isUsable: true, CarrierMerged: false, SubscriptionId: -1, IsPrimary: -1, Trusted: true, Restricted: false, Ephemeral: true, OEM paid: false, OEM private: false, OSU AP: false, FQDN: , Provider friendly name: , Requesting package name: io.particle.android.appMLO Information: , AP MLD Address: , AP MLO Link Id: , AP MLO Affiliated links: > SignalStrength: -69 UnderlyingNetworks: Null] I/io.particle.android.sdk.devicesetup.apconnector.ApConnectorApi29: onCapabilitiesChanged: 139, caps: [ Transports: WIFI Capabilities: NOT_METERED&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED&NOT_VCN_MANAGED LinkUpBandwidth>=10000Kbps LinkDnBandwidth>=10000Kbps TransportInfo: <SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00, IP: /192.168.0.2, Security type: 0, Supplicant state: COMPLETED, Wi-Fi standard: 4, RSSI: -69, Link speed: 58Mbps, Tx Link speed: 58Mbps, Max Supported Tx Link speed: 72Mbps, Rx Link speed: 72Mbps, Max Supported Rx Link speed: 72Mbps, Frequency: 2462MHz, Net ID: -1, Metered hint: false, score: 0, isUsable: true, CarrierMerged: false, SubscriptionId: -1, IsPrimary: -1, Trusted: true, Restricted: false, Ephemeral: true, OEM paid: false, OEM private: false, OSU AP: false, FQDN: , Provider friendly name: , Requesting package name: io.particle.android.appMLO Information: , AP MLD Address: , AP MLO Link Id: , AP MLO Affiliated links: > SignalStrength: -69 UnderlyingNetworks: Null] I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(117) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 45972) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(117) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 45974) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... W/cle.android.app: Cleared Reference was only reachable from finalizer (only reported once) I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(5) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 45980) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(5) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 45986) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012) 

Seems like the cause is this error:

Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 45972) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)

https://github.com/particle-iot/particle-android/blob/bda215376a916b39b16c091977132e29e616b8e5/devicesetup/src/main/java/io/particle/android/sdk/devicesetup/commands/CommandClient.java#L55 Looks like line 55 is where the actually error is occurring, while it's trying to create a socket to use to send and receive device commands.

We are need to target sdk 31 asap to comply with latest Play Store requirements - https://developer.android.com/google/play/requirements/target-sdk

mrlambchop commented 1 year ago

Hey folks, a few questions as we look into this:

I'm looking at this specific change right now FYI:

To better support Wi-Fi STA/STA concurrency, we recommend that OEM-customized frameworks and apps use the NetworkCallback#onCapabilitiesChanged() method instead of WifiManager#getConnectionInfo(), which only returns WifiInfo for a single network and was deprecated in Android 12. For more information, see [Wi-Fi Network Request API for peer-to-peer connectivity](https://developer.android.com/about/versions/12/behavior-changes-12#concurrent-connections).

Thanks,

N

markoImake commented 1 year ago

Hi Nick

Thanks for the response, appreciate you looking into this.

See answers to your questions below.

during testing, was your device connected to a local Wi-Fi network that supplies internet connectivity?

Yes the device was already connected to a local Wi-Fi network with internet connectivity when starting to setup process.

if so, what is the subnet mask and IP address of the local Wi-Fi network?

ip address: 192.168.1.1 mask: 255.255.255.0

What device is this being tested on and what exact android OS version?

The device is a Google Pixel 6a running Android 13. See attached screenshot for Android version details. When calling wifiManager.isStaConcurrencyForLocalOnlyConnectionsSupported() it returns true, so the issue is likely to be related to the Wi-Fi concurrency.

Screenshot_20221122-051616

mrlambchop commented 1 year ago

Thanks! Working on a patch to get you out of the immediate jail. Will loop back shortly!

mrlambchop commented 1 year ago

Initial PR is here - https://github.com/particle-iot/particle-android/pull/112 .

Its thanksgiving eve and Particle is off on vacation today, so its accordingly a little rough and ready (I need to fix a couple of misc files already from my PR), however, I tested the fix using the exact configuration that was struggling last time and it appears to work. However, potentially my test isn't correct!

Please give this a go and lmk - I'll continue to test tomorrow and tweak (for example, the timeout I added in probably is not needed to be so long).

markoImake commented 1 year ago

That's awesome thanks, I appreciate it! I'll give it a test and let you know how it goes.

Happy thanksgiving!

markoImake commented 1 year ago

I tried out the new PR, but unfortunately the issue is still happening. See console logs below.

Let me know if you need any further information.

D/GetReadyActivity: Claim code generated: xxxxxxxxxxxxxxxxx D/CompatibilityChangeReporter: Compat change id reported: 171228096; UID 10294; state: ENABLED V/WifiFacade: Network SSID found: "Thornwood" D/WifiFacade: Currently connected to: Thornwood, supplicant state: COMPLETED D/WifiScanResultLoader: Latest (unfiltered) scan results: [SSID: "BOOYAH", BSSID: 38:a6:59:17:02:e6, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -73, frequency: 2462, timestamp: 697958775603, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2462, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: 72:7c:3f:f8:41:9d, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -90, frequency: 5580, timestamp: 697958775668, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5610, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "tp link deco", BSSID: e4:c3:2a:eb:ee:33, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][RSN-PSK-CCMP+TKIP][ESS][WPS], level: -91, frequency: 5200, timestamp: 697958775366, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "rustenburgerking", BSSID: 60:a4:b7:0b:2a:be, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -68, frequency: 2447, timestamp: 697958775573, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 1, centerFreq0: 2457, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: d6:86:60:61:a2:ec, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -91, frequency: 5500, timestamp: 697958775642, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5530, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "CASA GM", BSSID: 48:d3:43:ce:f5:49, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -68, frequency: 2437, timestamp: 697958775507, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2437, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Angel Wifi", BSSID: 28:bd:89:ff:08:e5, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -88, frequency: 5180, timestamp: 697958775259, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo4398973", BSSID: 68:02:b8:1d:82:83, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -81, frequency: 5220, timestamp: 697958775401, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "H369A4A9709", BSSID: 94:a7:b7:4a:97:0a, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -88, frequency: 5200, timestamp: 697958775357, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo", BSSID: 5e:38:d8:30:d9:e9, capabilities: [WPA2-EAP/SHA1-CCMP][RSN-EAP/SHA1-CCMP][ESS], level: -85, frequency: 2462, timestamp: 697958775589, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2462, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Online.nl_7341", BSSID: 08:26:97:53:73:41, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS][MFPC], level: -71, frequency: 2442, timestamp: 697958775532, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2442, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: d6:86:60:61:80:ac D/WifiFacade: startScan() D/WifiScanResultLoader: Received WifiManager.SCAN_RESULTS_AVAILABLE_ACTION broadcast D/WifiScanResultLoader: Latest (unfiltered) scan results: [SSID: "BOOYAH", BSSID: 38:a6:59:17:02:e6, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -73, frequency: 2462, timestamp: 697958775603, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2462, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: 72:7c:3f:f8:41:9d, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -90, frequency: 5580, timestamp: 697958775668, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5610, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "tp link deco", BSSID: e4:c3:2a:eb:ee:33, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][RSN-PSK-CCMP+TKIP][ESS][WPS], level: -91, frequency: 5200, timestamp: 697958775366, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "rustenburgerking", BSSID: 60:a4:b7:0b:2a:be, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -68, frequency: 2447, timestamp: 697958775573, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 1, centerFreq0: 2457, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: d6:86:60:61:a2:ec, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -91, frequency: 5500, timestamp: 697958775642, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5530, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "CASA GM", BSSID: 48:d3:43:ce:f5:49, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -68, frequency: 2437, timestamp: 697958775507, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2437, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Angel Wifi", BSSID: 28:bd:89:ff:08:e5, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -88, frequency: 5180, timestamp: 697958775259, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo4398973", BSSID: 68:02:b8:1d:82:83, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -81, frequency: 5220, timestamp: 697958775401, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "H369A4A9709", BSSID: 94:a7:b7:4a:97:0a, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -88, frequency: 5200, timestamp: 697958775357, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo", BSSID: 5e:38:d8:30:d9:e9, capabilities: [WPA2-EAP/SHA1-CCMP][RSN-EAP/SHA1-CCMP][ESS], level: -85, frequency: 2462, timestamp: 697958775589, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2462, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Online.nl_7341", BSSID: 08:26:97:53:73:41, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS][MFPC], level: -71, frequency: 2442, timestamp: 697958775532, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2442, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: d6:86:60:61:80:ac D/WifiListFragment: new scan results: [io.particle.android.sdk.devicesetup.model.ScanResultNetwork@88e0f6ad] V/WifiFacade: Network SSID found: "Thornwood" D/WifiFacade: Currently connected to: Thornwood, supplicant state: COMPLETED D/WifiScanResultLoader: Received WifiManager.SCAN_RESULTS_AVAILABLE_ACTION broadcast D/WifiScanResultLoader: Latest (unfiltered) scan results: [SSID: "BOOYAH", BSSID: 38:a6:59:17:02:e6, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -78, frequency: 2462, timestamp: 698043169680, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2462, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo326D231", BSSID: 90:5c:44:f3:17:82, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -76, frequency: 5220, timestamp: 698043169469, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: 72:7c:3f:f8:41:9d, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -92, frequency: 5580, timestamp: 698043169762, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5610, centerFreq1: 0, standard: 11ax, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "tp link deco", BSSID: e4:c3:2a:eb:ee:32, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][RSN-PSK-CCMP+TKIP][ESS][WPS], level: -81, frequency: 2422, timestamp: 698043169391, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 1, centerFreq0: 2432, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "tp link deco", BSSID: e4:c3:2a:eb:ee:33, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][RSN-PSK-CCMP+TKIP][ESS][WPS], level: -88, frequency: 5200, timestamp: 698043169357, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "rustenburgerking", BSSID: 60:a4:b7:0b:2a:bf, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -78, frequency: 5180, timestamp: 698043169256, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "������������������������������������������", BSSID: 7e:61:66:45:d8:fd, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -80, frequency: 2437, timestamp: 698043169509, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2437, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "Ziggo", BSSID: ae:f8:cc:68:58:90, capabilities: [WPA2-EAP/SHA1-CCMP][RSN-EAP/SHA1-CCMP][ESS], level: -92, frequency: 2412, timestamp: 698043169291, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2412, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: "rustenburgerking", BSSID: 60:a4:b7:0b:2a:be, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS][WPS], level: -61, frequency: 2447, timestamp: 698043169587, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 1, centerFreq0: 2457, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: 06:31:92:c3:f0:2f, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -85, frequency: 5200, timestamp: 698043169367, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 2, centerFreq0: 5210, centerFreq1: 0, standard: 11ac, 80211mcResponder: is not supported, Radio Chain Infos: null, interface name: wlan0, SSID: , BSSID: d6:86:60:61:a2:eb, capabilities: [WPA2-PSK-CCMP][RSN-PSK-CCMP][ESS], level: -73, frequency: 2437, timestamp: 698043169499, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 2437, centerFreq1: 0, standard: 11n, 80211mcResponder: is not supported, Radio Chain Infos: null, int D/WifiListFragment: new scan results: [io.particle.android.sdk.devicesetup.model.ScanResultNetwork@88e0f6ad] D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(97) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 54308) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(91) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 54310) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(91) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 54312) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  D/DiscoverDeviceActivity: Waiting a couple seconds before trying the socket connection... I/CommandClient: Preparing to send command 'device-id' I/CommandClient: BUILT COMMAND DATA: 'device-id\n0\n\n' D/TrafficStats: tagSocket(91) with statsTag=0xffffffff, statsUid=-1 D/EZ: Can't close closable, arg was null. D/DiscoverDeviceActivity: Setup exception thrown: io.particle.android.sdk.devicesetup.setupsteps.SetupStepException: Process died while trying to get the device ID at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:48) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314) at android.os.AsyncTask$3.call(AsyncTask.java:394) at java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) at java.lang.Thread.run(Thread.java:1012) Caused by: java.net.ConnectException: failed to connect to /192.168.0.1 (port 5609) from /192.168.1.222 (port 54314) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:347) at libcore.io.IoBridge.connectErrno(IoBridge.java:237) at libcore.io.IoBridge.connect(IoBridge.java:179) at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436) at java.net.Socket.connect(Socket.java:646) at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55) at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44) at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42) at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012)  Caused by: android.system.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host) at libcore.io.IoBridge.isConnected(IoBridge.java:334) at libcore.io.IoBridge.connectErrno(IoBridge.java:237)  at libcore.io.IoBridge.connect(IoBridge.java:179)  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)  at java.net.Socket.connect(Socket.java:646)  at io.particle.android.sdk.devicesetup.commands.NetworkBindingSocketFactory.createSocket(NetworkBindingSocketFactory.java:46)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendAndMaybeReceive(CommandClient.java:55)  at io.particle.android.sdk.devicesetup.commands.CommandClient.sendCommand(CommandClient.java:44)  at io.particle.android.sdk.devicesetup.ui.DiscoverProcessWorker.doTheThing(DiscoverProcessWorker.java:42)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:324)  at io.particle.android.sdk.devicesetup.ui.DiscoverDeviceActivity$1.doInBackground(DiscoverDeviceActivity.java:314)  at android.os.AsyncTask$3.call(AsyncTask.java:394)  at java.util.concurrent.FutureTask.run(FutureTask.java:264)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)  at java.lang.Thread.run(Thread.java:1012) 

mrlambchop commented 1 year ago

I see the issue - its because I'm using an Android phone on 13 (pixel 4a) that doesn't have dual wifi AP support, so it disconnects from one network to join the other. I think my fix is directionally correct, but its missing a filter on the network callback to determine which type of network its looking for (internet or local). I'll find a pixel 7 and use that but I can probably change the code in the interim and we can give it a go again.

markoImake commented 1 year ago

I'm happy to test it out if you push through some changes.

markoImake commented 1 year ago

@mrlambchop is there any update on this issue? Could you give me an indication of how long it will take? We are hoping to get an app update out ASAP