目的
Androidアプリ(kotlin)でTHETAへダイレクトモード接続して、WebApiアクセスを行う。
ユーザー入力負担を減らすために、WifiNetworkSpecifierを利用する。
問題
WifiNetworkSpecifierから接続した場合、WebApiアクセスに失敗する。
Caused by: java.net.ConnectException: failed to connect to /192.168.1.1 (port 80) from /:: (port 0) after 10000ms: connect failed: ENETUNREACH (Network is unreachable)
AndroidOS設定からTHETAに接続すると、WebApiアクセスが正常に行えた。
そのため、WebApiやhttpアクセスが問題ではないことが分かった。
解決方法
THETAフォーラムQAで解決方法が見つかった。
Android公式サンプルには記述されていない2行を追加すればOK。
override fun onAvailable(network: Network?) {
//下記2行を追加する。
super.onAvailable(network)
connectivityManager.bindProcessToNetwork(network);
}
追記
THETA切断時は下記コードが必要だった。
Android公式
stackoverflow
connectivityManager.bindProcessToNetwork(null) //これを忘れるとTHETA切断後にWiFi接続しても、インターネットにアクセスできない。
connectivityManager.unregisterNetworkCallback(networkCallback)