Android2.0のWifiの仕組みを追っかけてみた。

Android2.0でWifiアドホックモードに対応させるために、いろいろゴニョゴニョしてるわけだが。

そもそも、AndroidがどのようにWifiをONにしてるのかAOSP(Android open source project)のWifi周りのコードを追っかけてみた。

いろいろと勉強になった。少し、Androidについて理解が深まった。
HandlerとLooper(スレッド間での情報のやりとり的な)
Activityとかも前より、理解が深まった!

Androidのフロント部分は、javaだし思ったより読みやすかったのでこれからも読もうと思う。

本題のAndroid2.0のWifiの仕組み

最初に概略図を以下にまとめた。これを見ながら、AOSPのコード読み進めるとやりやすいかも!

f:id:ukinau:20130717121740p:plain

最初勘違いしてたけど、WifiServiceってのは、コンポーネントのサービスのように、常時走るプログラムじゃないってこと。

しかも、WifiManagerのインスタンスを取得するときの

    WifiManager mWm = (WifiManager)getSysystemService(WIFI_SERVICE);     

っていうのは、WifiManagerを返すんじゃなくて、WifiServiceを返すってこと。

んで、基本的にWifiを操作するのは、

WifiService
WifiStateTracker

あと、これは結構探すの苦労したんだけど、WifiStateTrackerWifiServiceConnectivityServiceで初期化されてる!

WifiStateTrackerは、NetworkStateTrackerを継承していて
NetworkStateTrackerは、Handlerを継承しているので
WIfiStateTrackerは、Handlerとしても働きます。また、ConnectivityServiceの中のThreadで初期化されているのでConnectivityServiceのThreadに関連づけられます。

あとはまぁ、画像見れば分かるかな。
これは、結構解読するのに苦労したわ。

Wifiの挙動が違うことからも、多分Android4.0とかだとフローも少し変わるのかもしれない。
今度そっちもコード読んでみる