Android: Libero 003Z(ZTE Blade)をSIMカード無しで使う

私は3種類のスマートフォンを使っているのですが、SIMカードについては次のようになっています。

・Libero 003Z(ZTE Blade) - ソフトバンクのSIM
・htc EVO WiMAX(EVO 4G) - KDDIのSIM(本体組み込みでカードは無し)
・Nexus S - SIM無し

Nexus SはAmazonで出品者からネットで購入したもので、元々SIMカードは無く、WiFiをオンにして検証用に使っています。
試しにLibero 003ZのSIMカードを抜いたままで、Nexus Sと同じようにWiFiオンで使おうとしたところ、次のような画面になってホーム画面に移行できませんでした。

[ 003zのSIM無しの画面 ]
1) 起動時の画面 →
 
2) ロックを解除した時の画面 →
(本来はここでホーム画面になる)
3) 緊急発信の画面 →
 (110,119へ通報できるらしい)
4) 電源ボタン長押し時の画面
 

これは上記4)の画面で「機内モード」をONにした後、一度電源をオフにしてから再起動するとホーム画面に入ることができました。WiFiも使えます。
 *機内モード(Airplane Mode):飛行機の中で計器に影響を与えないように電波の送受信をしないモード。WiFiは機内モードからは独立しているようです。

[ 003zで機内モードONでの設定画面 ]

 

苦労した割には結局以上のように簡単に解決できることがわかったのですが、SIM無しで使うためのこの設定は、デバイスやキャリアによって異なるかも知れません。(Nexus Sでは特に機内モードにしなくても使える)
どのプログラムがSIMの有無のチェックや緊急発信の画面を出しているのか、logcatとAndroid4.0.3のソース、ネットでの情報などで調べたので、起動からホーム画面に移行するまでの画面表示に関するプロセスの概要を以下にメモしておきます。



Boot Loader → Linux Kernel → init → Zygote → System Server

ZygoteがDalvik VMを生成し、System ServerはこのDalvik VM上で実行される。
System ServerにはWindow Manager、Activity Managerなど、画面を制御するプログラムが含まれている。

Window ManagerはKeyguardViewManagerによって画面をロックする。
Window ManagerはKeyguardStatusViewManagerによりSIMの状態を調べる。
Window ManagerはGlobalActionsにより機内モードのon/offを調べる。

Activity ManagerはDalvik VM上で実行される次のアプリケーションを起動する。
 com.android.launcher (Home画面の表示)
 com.android.phone (Dialer)
 com.android.settings (設定)

SIMの状態と機内モードのon/offはブロードキャストによってcom.android.phoneに伝えられる。

[ソースコード]
System Server: frameworks/base/services/java/com/android/server
Window Manager: frameworks/base/services/java/com/android/server/wm
Activity Manager: frameworks/base/services/java/com/android/server/am
KeyguardViewManager,KeyguardStatusViewManager,GlobalActions: frameworks/base/policy/src/com/android/internal/policy/impl
com.android.phone: packages/apps/Phone/src/com/android/phone
com.android.launcher: packages/apps/Launcher2/src/com/android/launcher2

画面ロックの解除操作を行うと、

  • SIMカード有りの場合、またはSIMカード無しで機内モードonの場合:
      ホーム画面が表示される

  • SIMカード無しで機内モードoffの場合:
      com.android.phoneによって生成された上記2)の画面が表示される。←(この辺はzteによってカスタマイズされているのかも知れない)
      [緊急発進]ボタンを押すと、Activity ManagerはIntentを発行してcom.android.phoneのEmergencyDialerを起動する。

参考URL:

[Disable the screen lock when the Android OS startup]
https://groups.google.com/group/android-porting/browse_thread/thread/d01...

[[翻訳]Androidの起動工程]
http://xiangcai.at.webry.info/201104/article_4.html

[Androidの仕組みについて教えてください]
https://groups.google.com/forum/#!topic/android-group-japan/hvSiywdGnPM

[Android アプリケーションが起動するまでの流れ]
http://dsas.blog.klab.org/archives/52003951.html

[Android:ランチャーActivityを起動しているのは誰?]
http://yuki312.blogspot.jp/2012/03/androidactivity.html