WIFI_STATE_CHANGED_ACTIONだけでは何も送られてこない。WIFIをONの状態からPocketWifiをONにした場合は、WIFIも同時にON/OFFされるので上記2つのタイミングだけで十分なように思えたが、他の何が必要なのか?
NETWORK_STATE_CHANGED_ACTION
少し調べてみると、旧バージョンはroot化した環境下でテザリングを実現するためのアプリを使う形になっていた。
ソースコードもオープン化されているので少しのぞいてみるとキーとなるキーワードがいくつか出てきた。
android.net.conn.CONNECTIVITY_CHANGE
android.net.conn.BACKGROUND_DATA_SETTING_CHANGED
UsbManager.ACTION_USB_STATE
android.bluetooth.adapter.action.STATE_CHANGED
android.location.PROVIDERS_CHANGED
com.android.sync.SYNC_CONN_STATUS_CHANGED
WIFIがらみだけ判断したいのでとりあえず一番それっぽい「android.net.conn.CONNECTIVITY_CHANGE」に着目してみた。
実際にテザリングを切り替えると、若干タイムラグがあるものの、3回づつ呼び出されている。
3回の原因はよく解らない。
intentの付加情報で判断できるかと思ったが、残念なことにほとんどそれらしい情報は得られなかった。
仕方が無いので、NetworkInfoをCONNECTIVITY_CHANGEのタイミングで表示させてみてみた。
あまり違いがわからないが、Type 4(mobile_dun) SubType 13(LTE)が(Bluetoothも含め)テザリング機能をONにするとInfoStateがCONNECTEDとなっている。
ConnectivityManager | Android Developersを見てみたが、はっきりとしたことがよくわからないが、
DUN通信はキャリアによってテザリングのために使われることがあるようだ。
手元のGL07Sはまさにこのタイプなのだということで納得しておこうと思う。
タイミングとしてはこれで使えそうな感じかな?
Bluetoothのタイミングは接続時に来たり不安定なので、ちゃんとandroid.bluetooth.adapter.action.STATE_CHANGED
なども必要なら監視する必要がありそう。
0 件のコメント:
コメントを投稿