So, I know this issue is really common... but after lots of searching I haven't found a satisfactory solution, only a couple of wonky workarounds.
My Nexus 4 is running 4.4.2 - everything is stock, and unrooted. Perhaps this WiFi bug comes as no surprise since Google likes to take its time fixing it. Anyways, a few certain SSIDs, including a really common public one here called Shaw Go WiFi, are stuck looping "Obtaining IP Address" when I try to connect. Apparently the problem is to do with a DHCP request conflict btwn the router and the client.
With public WiFi, all you can do is deal with it through the client side (or in other words, you have no control over the router). That said, when other devices work on the same network, you know it can't just be the router - my understanding is that it has to do with the kernel/drivers as well. Plus, this did not use to ever happen on my N4 before, which definitely means it isn't 100% on the router side. Perhaps it is to do with my installation of Snapdragon Battery Guru, which I promptly uninstalled to fix the problem but to no avail.
I also tried factory resetting, twice. The second time I did a true hard reset from scratch by not signing in with my Google account or syncing apps/app data. Evidently neither reset resolved the problem.
I have only noticed two prominent workarounds in my research:
1. Deleting a system folder containing files pertaining to the DHCP and fiddling with a couple permissions. This can only be done with root access, which I don't have and want to avoid for now unless I truly need to use it.
2. Use a static IP. Except this is not a real solution at all since it only works for each SSID you come across that doesn't play nice, and it doesn't work anyways if you do not know the Static IP, Gateway address and Subnet mask, etc in the case of a public access point.
In terms of a REAL solution, I initially had hopes that 4.4.3 will be the one to fix this .. and who knows it might. But when I looked deep into past threads throughout the web, I was flabbergasted to find out that this problem has been pervasive since at least the days of Gingerbread, well before I converted to Android along with many others. If after all this time the problem is still there, how can we be sure that Google will resolve it in the next dot release?
Long story short, I am wondering if there is an alternative that is remotely ideal, or at least better than the two mentioned above. If anyone can chime in with a hint that would be great.