While not the easiest way around the problem, it is possible to do this using Tasker. This is a program that allows you to script various things within Android (e.g. I have it set to turn off the keyguard when I connect to my home SSID.) The following profile for detecting Wi-Fi signal is quoted from this thread:
Profile: Low WiFi (1)
Event: Display Unlocked Enter: WiFi (2) Task: WiFi Sig (1)
A1: Variable Set [ Name:%wfs To:%WIFII Do Maths:Off Append:Off ]
A2: Variable Split [ Name:%wfs Splitter:Sig: Delete Base:Off ]
A3: Variable Clear [ Name:%wfs1 Pattern Matching:Off ]
A4: Variable Split [ Name:%wfs2 Splitter: Delete Base:On ]
A5: Variable Set [ Name:%WIFISG To:%wfs22 Do Maths:Off Append:Off ]
A6: Array Clear [ Name:%wfs2 ] Task: WiFi (2)
A1: Write File [ File:wifitest.txt Text:Task start: %DATE %TIME Append:On ]
<Signal check>
A2: Wait [ MS:0 Seconds:15 Minutes:0 Hours:0 Days:0 ]
A3: Goto [ Type:Action Label Number:1 Label:End ] If [ %SCREEN ~ off ]
A4: Goto [ Type:Action Label Number:1 Label:End ] If [ %WIFII !~ *CONNECTION* ]
A5: Perform Task [ Name:WiFi Sig Stop:Off Priority:5 Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: ]
A6: If [ %WIFISG < 3 ]
A7: WiFi [ Set:Off ]
A8: Wait [ MS:0 Seconds:0 Minutes:5 Hours:0 Days:0 ]
A9: WiFi [ Set:On ]
A10: End If
A11: Goto [ Type:Action Label Number:1 Label:Signal check ]
<End>
A12: Write File [ File:wifitest.txt Text:Task end: %DATE %TIME Append:On ]
I've never personally done anything that complicated with the Wi-Fi, but the profiles I have set around SSID work like a charm.