国際ローミング時の判定には、意外な?落とし穴があります。
TelephonyManagerのstate_changeからローミング状態を受けとり、前の状態と違ったらローミング中と判定するように実装します。初期値はisRoaming =false(国内)です。国外に出ちゃうとtrueが返ってきます。
しかし、これだけで実装しちゃうとローミング中に電源オンオフするとなんと!一瞬ローミングオフ(国内)になり、その後ローミングオン状態になる可能性があるんですよ。
前の状態はローミング中なんでtrueですよね。で、現在の状態はTelephonyManager に問い合わせて、電源切ってもつけても海外にいたらtrueが返ってきますよね。しかし、ここに落とし穴が。
ブート時にはTelephonyManagerの処理がまだ行われておらず初期値のfalseが返ってくる可能性があるんです。つまり、前の状態と変わったと判断し国内に戻ったと認識するんです。
その後、TelephonyManagerのstate _changeが現在の状態trueを返しローミングになると。
ややこしいけど、ローミングの判定処理を行う時には、通信業者と接続されるまでは前の状態をそのまま使うのが間違いないかなと思いました。
☆そのうちもう少し分かりやすく書けたらいいなぁ笑