I've just had a bit of a play with this and it all seems to work as expected. However, it does raise the question of how to deal with the situation of being in a low signal region and not having an alternative connection.
Adding an event listener as suggested by Barry results in a call to the specified function every time the network status changes. The function argument is a string containing the network interface status, exactly as would be returned by System.getNetlinkStatus(). You may then choose to restart the network if the signal is low as demonstrated by gopronto's quality code (although I believe you'd do so on wifi-level1 or wifi-level2).
If the signal is still low on reconnection, the event listener gets called again and the network gets restarted again...and so it goes on.
I suppose a timer could be added to the event listener to check how long since the last restart and only do another if it's been (for example) more than a minute.