There seems to be several issue regarding 3G connection issue on Nexus One.
Issue range from fluctuation of signal strength depending on where you hold your phone, and others.
One issue I am experiencing, which some other people report is the fact that Nexus One causes network error while up arrow indicator was staying on.
This has been reported on several of help forums.
Investigating issue myself, it because evident that this problem was happening when the device is transitioning from UMTS to HSDPA.
I have observed that normally, the device claim it is on UMTS connection. But at the moment that something try to access the network, this mode changes to HSDPA. After few seconds of network inactivity, this mode turns back to UMTS.
Looking at pattern, there are quite common chance that this transition do not go smooth, and the device would stuck with UMTS, unable to send or receive data. Therefore, data is constantly resent, eventually timing out causing error. Problem is that timeout can get very long when applications are trying to gain access to the network connection, as it appears to be only chance it can reset is when the application attempts to transition to HSDPA from UMTS, after connection attempt is ceased. (Note this problem do not happen if you are on 2G (EDGE/GPRS) connection. Also there were some story that some people have their phone in HSDPA mode permanently. (perhaps they have very strong 3G signal?)
I found simple workaround to this issue. My idea was, if this is caused by failure of transition from UMTS to HSDPA, why not just force the device to be on HSDPA mode?
I downloaded the piece of program called ConnectBot, which is terminal emulator program. There is way to connect to local console using program. You’d login to your local console, then type in the following.
ping -i 5 22.214.171.124 &
Where 126.96.36.199 is some IP address. This particular command line will send out ping packet every five seconds. Now this IP address doesn’t have to be reachable. It is actually beneficial if it is not, as you only need to send out some packet and you don’t care about any reply. After you type in this command line (do not forget “&”) press enter, and then open up a menu and disconnect. This ping command will be running in background.
Alternatively you could create text file containing the command line above, then execute using the following command.
sh ./script &
Because it is merely running the program in the background, if you restart your phone, you will do this process again.
Trying this, now my phone stays on HSDPA all the time, and seems to be stable now. I had some concern about impact on battery life this may cause, but it seems to be minimal.
Please do note that this may potentially violate T-mobile’s term as described below
(e) running software or other devices that maintain continuously active Internet connections when a computer’s connection would otherwise be idle, or “keep alive” functions. For example, you cannot use a Data Plan for Web broadcasting, or for the operation of servers, telemetry devices and/or supervisory control and data acquisition devices.
Although purpose of this workaround is not to activate connection the internet, they may point out that by doing this, we are still shooting out ICMP packet though impact to infrastructure should be very minimal.