Monday, September 26, 2011

Forcing HTC handsets to use only 3G networks

EDIT: Yup, this is what kept the OTA 2.3.6 update installed. FWIW, I ran this config for several weeks and noticed no real change in battery life. I've since reverted back in order to update to 2.3.6.

DISCLAIMER: As far as I can tell this makes a negligible difference in battery consumption, and could cause you problems if you forget to change it back before traveling somewhere that does use 2G (GSM). For example, this phone (US T-Mobile version) currently won't work at all on AT&T. I am simply posting this so that I don't forget I did it ;-)

AND, I also think it is keeping me from updating to 2.3.6.

A common problem with b-mobile data-only SIMs is heavy battery usage by the cellular radio looking for a signal, even though it has one. Unfortunately I don't know how to fix this but I thought of a way to perhaps minimize the effect. I am guessing that since the phone thinks there is no 3G connection, it is also searching 2G networks as well, which we don't have here in Japan. Perhaps if I set my Nexus One to only use 3G, battery life might just get a little better.

Then again, perhaps not, since 3G uses much more power than 2G and it is the search for a 3G signal that is killing the battery.

From what I can tell, the following values set the default network in the build.prop file FOR HTC HANDSETS.
0 = WCDMA Preferred
1 = GSM Only
2 = WCDMA Only
3 = GSM/WCDMA (auto mode, according to PRL)
4 = CDMA / EVDO. Preferred
First I pulled the file from my phone.
adb pull /system/build.prop

Find this line.
As set, it allows GSM, though it prefers WCDMA

I changed it to allow only WCDMA:

Then I pushed it back to the phone's SD card (because my phone's boot image has security on and I can't mount /system as read write from adb).
adb push build.prop /mnt/sdcard

Next, I opened a shell on the phone, switched user to root, and mounted /system as read write from within the phone.
adb shell
sumount -o remount,rw /dev/block/mtdblock3 /system

Finally, I made another backup copy of build.prop on my SD card, replaced the original with the modified one, and rebooted the phone.
cd /system
cp build.prop /mnt/sdcard/build.prop.bak
rm build.prop
cp /mnt/sdcard/build.prop build.prop



  1. BTW, FWIW, and FYI ( ok enough acronyms) this is neededwith Stock Android and not HTC's Android (in my experience, anyway).

    Both my Sharp Androids as well as the HTC Desire ROM I ran on my Nexus One have the option to run WCDMA-only in the Mobile Network settings, as well as GSM-only or Auto GSM+WCDMA. So no need to root/edit files to get them to run 3G only ;)

    So does CyanogenMod IIRC...

  2. Hey thanks for the comment. Neither of my HTC handsets have the option to use only 3G in settings - only the option to use 2G. I don't recall seeing this in CM6 (for the Magic). I've never used CM for the N1, so I can't say about that.

    Either way, it doesn't make much of a difference. I wrote this post about a month ago and just posted it today, mainly in case someone else had the bright idea to try. ;-)

  3. Okay man, you should've dug a little more.
    If you use *#*#4636#*#* code in the dialer, it give you "phone testing". (But maybe HTCs will not accept that code because of non-stock dialer)
    In that case use "Any cut" from android play store and create a shortcut to phone information.

    In that menu you get to choose only WCDMA.
    More on: