Desire HD (SIMフリー化した001HT)でb-mobileSIMやXiSIMみたいな
データ専用SIMを使おうとすると、通信サービスなし状態になって電波強度が取得できない。
radioとRILとSIMの相性が悪いらしいんだが、わりと不便。
とりあえずの代替策として「RealSignal」みたいなアプリを使っている。
(APIv7のgetGsmSignalStrengthで取得可能である)
ここで、ステータスバーのアンテナが圏外表示になる仕組みを調べたところ、
次のようになっていた。
private final void updateSignalStrength() { int iconLevel = -1; int[] iconList; // Display signal strength while in "emergency calls only" mode if (mServiceState == null || (!hasService() && !mServiceState.isEmergencyOnly())) { //Slog.d(TAG, "updateSignalStrength: no service"); if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1) { mPhoneSignalIconId = R.drawable.stat_sys_signal_flightmode; } else { mPhoneSignalIconId = R.drawable.stat_sys_signal_null; } mService.setIcon("phone_signal", mPhoneSignalIconId, 0); // set phone_signal visibility false if hidden if (mPhoneSignalHidden) { mService.setIconVisibility("phone_signal", false); } return; } if (!isCdma()) { int asu = mSignalStrength.getGsmSignalStrength(); // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5 // asu = 0 (-113dB or less) is very weak // signal, its better to show 0 bars to the user in such cases. // asu = 99 is a special case, where the signal strength is unknown. if (asu <= 2 || asu == 99) iconLevel = 0; else if (asu >= 12) iconLevel = 4; else if (asu >= 8) iconLevel = 3; else if (asu >= 5) iconLevel = 2; else iconLevel = 1; (略)
つまり、「hasService()」の判定で圏外扱いされているらしい。
確かにそれはそれで正しいんだろうけど、
DHD×bmobileみたいにサービスなしで通信してる場合困る。
(そんな例外認めたくないけどw)
そんなわけで同ファイルの少し上にあるのhasService()のところをちょっと改変した
private boolean hasService() { if (mServiceState != null) { switch (mServiceState.getState()) { // case ServiceState.STATE_OUT_OF_SERVICE: case ServiceState.STATE_POWER_OFF: return false; default: return true; } } else { return false; } }
1034行目、STATE_OUT_OF_SERVICE状態の判定をコメントアウト。
弊害としてはSIMなし時にもSTATE_OUT_OF_SERVICEと判定されるので、
アンテナだけ見るとSIMを認識していないのか圏外なのかわからないということぐらいかな。
ただ、SIM認識していないときは、エラーアイコンが出るので大丈夫だと思うが…
んで、SystemUI.apkをビルドし直して入れ替えた結果がこちら↓
↑カバーなしの状態
↑カバーを付けた状態
ちゃんとデータ通信のアイコンも出るようになった。
これをやったところで
「ネットワークに接続していません」
エラーが出なくなるわけでもないんだけどねw
完全に自己満足です、はい。
おまけ:
今回改変したSystemUI.apk DL
ただし、CyanogenMod7のgitからビルドしたものなので、それ以外で使えるか不明。
当然自己責任で。
この場合、セルスタンバイによるバッテリー食いは緩和されますでしょうか?
残念ながら見た目だけの問題なので変わらないと思います・・・。
ご回答ありがとうございます。お手数おかけしました。