[EVO 4G Android Development] distincthead:
Ok, I think a few of us would benefit from learning what exactly a PRL is. It's not some super top secret CDMA technology, it's not a bunch of magic, it's simply a list of SIDs and some other stuff. That's it.

A SID (system idenfication number) is a number used to identify a cellular network in a certain area. The PRL checks to see if you are in your "home" SID, in which case you aren't roaming; if you aren't, then it checks for the first available SID for roaming, and connects. SIDs other than your home SID listed in the PRL should in theory be SIDs on which you are allowed to roam. Having otherwise would be a pointless waste of time/data/battery/etc. SIDs are specific to each provider, so a Sprint SID will not be the same as a Verizon SID, and so on.

The PRL, somewhat oversimplified, is basically a list of SIDs on which you are allowed access, either because they are a) your home SID b) your provider's SIDs, or C) other carrier's SIDs upon which you are allowed to roam i.e. your carrier and the other carrier have an agreement of some sort. The PRL groups these SIDs into geographical areas and then goes down the list, top to bottom, until it finds a usable signal (no matter how crappy), and then the phone "connects" to said signal. So let's give an example here.

04162

04145

04170

04183

00119

First, the phone checks to see if I'm in the home SID (4162 which is Sprint). If I am, that's it. If not, it goes down the list and connects to the next available one (roaming). Sometimes, it'll get down to e.g. 00119 (verizon) in which case I am roaming on another carrier's network. The PRL DOES NOT take signal strength into account, it simply connects to the next available SID. I think this is important to consider, especially if you are going to be editing your own PRL files. It doesn't matter if the next one on the list is super ****ty, and the one after that has the best signal known to man that will max out 3G like no other. It'll connect to the crappy one, because it's next on the list.

Also, a feature of the PRL is the "roaming indicator" number. The default indicator is your carriers number; for sprint this is usually 1, and on sprint PRLs Verizon is usually 160. So if you connect to a SID with the roaming indicator of 160, your roaming icon will likely show up, and your phone will know that it's roaming. It's possible to screw around with these numbers, so that your Sprint phone thinks the Sprint SID on which it is connected is now roaming. Oh well, whatever the case Sprint doesn't seem to "count" it as roaming. So yay, that's good.

Now, disregarding priorities, you can move SIDs up or down on the list. You can knock that ****ty one below the super awesome one, and connect to the SID you know to be better.

It's a bit more complicated than that, but this is a good explanation I think. Chime in if you'd like to expound upon it.

http://en.wikipedia.org/wiki/Preferred_Roaming_List

If you want to go more in depth, check out this for starters:

http://www.scribd.com/doc/25885796/PRL-Technical-Workshop

Maybe we can all get together and get various PRLs that work properly for our areas. I'm sorry I haven't been more active, as I simply don't have the time to screw around with PRLs all day (or even at all, like tonight).