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のコード読み進めるとやりやすいかも!
最初勘違いしてたけど、WifiServiceってのは、コンポーネントのサービスのように、常時走るプログラムじゃないってこと。
しかも、WifiManagerのインスタンスを取得するときの
WifiManager mWm = (WifiManager)getSysystemService(WIFI_SERVICE);
っていうのは、WifiManagerを返すんじゃなくて、WifiServiceを返すってこと。
んで、基本的にWifiを操作するのは、
WifiService
WifiStateTracker
あと、これは結構探すの苦労したんだけど、WifiStateTrackerとWifiServiceはConnectivityServiceで初期化されてる!
WifiStateTrackerは、NetworkStateTrackerを継承していて
NetworkStateTrackerは、Handlerを継承しているので
WIfiStateTrackerは、Handlerとしても働きます。また、ConnectivityServiceの中のThreadで初期化されているのでConnectivityServiceのThreadに関連づけられます。
あとはまぁ、画像見れば分かるかな。
これは、結構解読するのに苦労したわ。
Wifiの挙動が違うことからも、多分Android4.0とかだとフローも少し変わるのかもしれない。
今度そっちもコード読んでみる