最初に、あなたの IP アドレスが何であるかを確認できます:
public InetAddress getIpAddress() {
InetAddress inetAddress = null;
InetAddress myAddr = null;
try {
for (Enumeration<NetworkInterface> networkInterface = NetworkInterface
.getNetworkInterfaces(); networkInterface.hasMoreElements();) {
NetworkInterface singleInterface = networkInterface.nextElement();
for (Enumeration<InetAddress> IpAddresses = singleInterface.getInetAddresses(); IpAddresses
.hasMoreElements();) {
inetAddress = IpAddresses.nextElement();
if (!inetAddress.isLoopbackAddress() && (singleInterface.getDisplayName()
.contains("wlan0") ||
singleInterface.getDisplayName().contains("eth0") ||
singleInterface.getDisplayName().contains("ap0"))) {
myAddr = inetAddress;
}
}
}
} catch (SocketException ex) {
Log.e(TAG, ex.toString());
}
return myAddr;
}
この IP を使用して、次の方法でブロードキャストを取得しました。
public InetAddress getBroadcast(InetAddress inetAddr) {
NetworkInterface temp;
InetAddress iAddr = null;
try {
temp = NetworkInterface.getByInetAddress(inetAddr);
List<InterfaceAddress> addresses = temp.getInterfaceAddresses();
for (InterfaceAddress inetAddress: addresses)
iAddr = inetAddress.getBroadcast();
Log.d(TAG, "iAddr=" + iAddr);
return iAddr;
} catch (SocketException e) {
e.printStackTrace();
Log.d(TAG, "getBroadcast" + e.getMessage());
}
return null;
}
もちろん1つの方法で行うこともできますが、私の実装では2つの方法に分けることが役に立ちました。
Wifi Tether がオンになっているかどうかを確認するには、次のコードを使用できます。
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for (Method method: wmMethods) {
if (method.getName().equals("isWifiApEnabled")) {
try {
if ((Boolean) method.invoke(wifi)) {
isInetConnOn = true;
iNetMode = 2;
} else {
Log.d(TAG, "WifiTether off");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
クライアント デバイスがサーバー デバイスがモバイル ホットスポットかどうかを知る必要がある場合は、特定の IP アドレスを使用できます。私の知る限り、すべてのテザリング デバイスは同じアドレス 192.168.43.1 を持っています。これは、Android 2.3 と 4.+ で同じです。多くの携帯電話とタブレットで確認しました。もちろん、それは最善の解決策ではありませんが、高速です。私のアプリケーションでは、クライアント デバイスがチェック (このアドレスにパケットを送信) し、サーバー デバイスは "yesIamInTheterModeIamYourServer" のような事前定義された方法で応答します。