2012年7月30日月曜日

SIMエミュレーション

Androidは android.telephony.TelephonyManager からSIMの事業者や接続している通信網の事業者情報を取得します。
これらを使ったアプリを作って動作確認する場合、実際に各事業者のSIMを用意したり渡航して目的の通信事業者に接続するか、ラッパクラスを作ってテスト(動作確認)用にスタブのような固有の応答を返すなどの対策をする必要があります。

カスタムROMなら、TelephonyManager 自体にそういう「デバッグ用固定応答」の機能を持たせることができます。
というわけでやってみました。(差分1 差分2

/packages/apps/Settings
設定画面を追加します。
SIMの事業者と接続している通信網の事業者を別々に設定できます。
HNI(MCC+MNC)と国コード、事業者名は任意入力できますが、 cts/tests/tests/telephony/src/android/telephony/cts/SmsManagerTest.java に載っている事業者をプリセットリストに列挙しています。http://mcclist.com/ を参考にしてもよいかも。

/frameworks/base
設定画面で設定した事業者情報を返すように TelephonyManager に手を入れています。
実SIMが差さっているときはSIMエミュレーションせず実SIM・実網情報を返すようにしています(が、手元にGNに差さるSIMがなくて動作は確認できていません)。 ← マイクロSIMしか持ってない
TelephonyProperties は SystemProperties.set()/get() する設定名を保持しています。設定アプリから "gsm." プリフィクスを更新するためには system/core/init/property_service.c の property_perms[] に
    { "gsm.",             AID_SYSTEM,   0 },
という行を書き足す必要があります。
今回は "persist.sys." プリフィクスを使うことで再起動後も設定を残しておけるようにしています。

※Play Storeアプリも TelephonyManager 経由で事業者情報を取得しているようです。

0 件のコメント:

コメントを投稿