moyashiさんがiOSでやってたのをAndroidでもやってみる。
ひとりぶろぐ - FlashAirが、PQI Air Cardが使いやすくなる!WiFiストレージ接続中でも3G/LTE経由でインターネット通信ができるようにするiOSのWiFi設定
WiFi接続時でも3G/LTE接続を維持させる
Android、少なくとも今回試したNexus5はWiFi接続をすると3G/LTEインターフェースrmnet0がDownとなる。
これではWiFiストレージに接続しつつ3G/LTE通信をする事が出来ませんので先ずはこれをなんとかする。
確認方法はadb shellなどでnetcfgと叩けばOK
logcatを見た感じ、このあたりの制御しているのはConnectivityService.javaなのが分かった。
ConnectivityService.javaこいつのhandleConnectを弄ってWiFi接続しても3G/LTEを切断しないようにする。
ビルドするの面倒くさいのでsmali書き換えた。
services.odexの中の
ConnectivityServices.smali
.line 2265 invoke-direct {p0, v1}, Lcom/android/server/ConnectivityService;->isNewNetTypePreferredOverCurrentNetType(I)Z move-result v5 const/4 v5, 0x0 if-eqz v5, :cond_69 #if-eqz v5, :cond_6a .line 2267 iget-object v5, p0, Lcom/android/server/ConnectivityService;->mNetTrackers:[Landroid/net/NetworkStateTracker; iget v6, p0, Lcom/android/server/ConnectivityService;->mActiveDefaultNetwork:I aget-object v2, v5, v6 .line 2270 .local v2, "otherNet":Landroid/net/NetworkStateTracker; new-instance v5, Ljava/lang/StringBuilder;
これでWiFiと3G/LTEの両立が出来るようになる。
Defaultgatewayの変更
shell@hammerhead:/ $ busybox route busybox route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0 default 10.3.1.162 0.0.0.0 UG 0 0 0 rmnet0 10.3.1.160 * 255.255.255.252 U 0 0 0 rmnet0 10.3.1.162 * 255.255.255.255 UH 0 0 0 rmnet0 126.211.134.30 10.3.1.162 255.255.255.255 UGH 0 0 0 rmnet0 126.211.134.62 10.3.1.162 255.255.255.255 UGH 0 0 0 rmnet0 173.194.126.135 10.3.1.162 255.255.255.255 UGH 0 0 0 rmnet0 192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0 192.168.1.1 * 255.255.255.255 UH 0 0 0 wlan0
こんな感じになってしまうので、
#busybox route del default gateway 192.168.1.1
って感じでWiFi側のゲートウェイを消してやる。
いちいちこんなの手動で打ち込むの頭悪いので自動化する。
Llama - Location Profiles
Locale Execute Plug-in
LlamaでWiFi接続をトリガーにし、 Locale Execute Plug-inで上記コマンドを実行するようにした。
問題点
- TaskerでWiFiの切り替わりをトリガーにするイベントがうまく動かなくなる。
WiFi切断すると3G/LTE通信が出来なくなる。
1.はLLamaならうまく動いてるのでまぁいいかなと…
2.は気のせいだったようだ…
あと、WiFiストレージ繋いだ際のDNSを8.8.8.8にしておいた方がいいかもね。
とりあえず出来たよ!な感じなのでもっといい感じに実装してくれる人が現れるのを待ちます。