Android中的热点/绑定模式下的多播支持

时间:2011-07-01 16:25:57

标签: android wifi android-wifi multicast

我有一个原型Android应用程序正在侦听多播数据包以“发现”客户端进行通信。套接字设置类似于:

InetAddress group = InetAddress.getByName("228.1.2.3");
MulticastSocket s = new MulticastSocket(4000);
s.joinGroup(group);

当所有设备通过WiFi连接时,此功能非常有效。我想用手机充当便携式热点来支持这一点。但是,虽然我的所有设备似乎都正确连接到热点,但我不再收到组播数据。我想知道是否存在禁止在热点模式下进行此类通信的限制,或者是否需要任何其他网络配置才能启用此功能?我在运行Gingerbread和Froyo的几个不同的设备上尝试过这个,但没有运气。

2 个答案:

答案 0 :(得分:3)

正如本文所示: https://plus.google.com/+Chainfire/posts/9NMemrKYnCd

MulticastSocket上:: setNetworkInterface()

将是答案

您可以通过以下方式找到wlan0 eth:

public static NetworkInterface getWlanEth() {
    Enumeration<NetworkInterface> enumeration = null;
    try {
        enumeration = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        e.printStackTrace();
    }
    NetworkInterface wlan0 = null;
    StringBuilder sb = new StringBuilder();
    while (enumeration.hasMoreElements()) {
        wlan0 = enumeration.nextElement();
        sb.append(wlan0.getName() + " ");
        if (wlan0.getName().equals("wlan0")) {
            //there is probably a better way to find ethernet interface
            Log.i(TAG, "wlan0 found");
            return wlan0;
        }
    }

    return null;
}

尝试并了解热点模式中是否有效...

答案 1 :(得分:0)

您是否拥有清单权限并且正在创建锁定?

有关权限,请参阅http://developer.android.com/reference/android/Manifest.permission.html中的'CHANGE_WIFI_MULTICAST_STATE'

另外,要创建多播锁...请参阅: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html