我在WearOS上写了一个工具,使用NanoHttpd来创建了一个WebServer,当使用普通路由器的WIFI时,同一网段的设备都能通过浏览器正常访问到,而当手表连接到手机的无线热点时,就无法访问了,要怎么才能实现正常访问?
我的步骤是,通过ConnectivityManager获取WIFI状态,当WIFI处于可用状态时,显示当前IP与服务运行的端口号(IP+":"+PORT)。
端口号取得如下:
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(0);
int PORT = serverSocket.getLocalPort();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
IP地址取得如下:
ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback(){
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(networkInfo!=null&&(networkInfo.isConnectedOrConnecting()||networkInfo.isAvailable())){
//此处使用WifiManager取得本机Wifi的IP地址
String ip = IPUtil.intToIp(wifiManager.getConnectionInfo().getIpAddress())+":"+ Config.getInstance().getPORT();
}
}
@Override
public void onLosing(Network network, int maxMsToLive) {
super.onLosing(network, maxMsToLive);
}
@Override
public void onLost(Network network) {
super.onLost(network);
}
@Override
public void onUnavailable() {
super.onUnavailable();
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
}
@Override
public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
super.onLinkPropertiesChanged(network, linkProperties);
}
}
在一个星期前解决了,刚刚才想起来这个提问。
引起这个问题的原因是机型ROM的问题,测试用手表为TicWatch 2,系统为Ticwear(Android 5.1),正常的Wear OS系统是不存在这个问题的。
解决方案:在设置-权限-【对应的应用】中将移动数据权限打开,此时应用可以使用热点进行访问。