Tôi đã có cùng một vấn đề và đưa ra một giải pháp do sự kết hợp của @braden, @ user707606 và chủ yếu là bài đăng của Chainfire trong số Link này.
Đăng trong liên kết đẹp nhưng không thực sự cung cấp bất kỳ mẫu mã nào nhưng ở đây là mẫu. Trước tiên, bạn cần phải có được Multicast Lock, điều này là cần thiết cho một số thiết bị Android, đã không cố gắng trong hầu hết trong số họ, nhưng nó đã được đề cập trong một số bài viết khác, vì vậy tôi đã bao gồm nó trong mã của tôi.
Quyền là bắt buộc, vì vậy trước tiên, hãy thêm quyền vào tệp Tệp kê khai của bạn.
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Sau đó, bước thứ hai là mua khóa đa phương tiện theo phương pháp của bạn.
/* Acquire MultiCast Lock */
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock multicastLock = wifi.createMulticastLock("multicastLock");
multicastLock.setReferenceCounted(true);
multicastLock.acquire();
Và sau đó, tìm Wifi Network Interface của bạn
/**
* Finds Network Interface of Wifi Ethernet.
*
* @return
*/
public static NetworkInterface findWifiNetworkInterface() {
Enumeration<NetworkInterface> enumeration = null;
try {
enumeration = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
NetworkInterface wlan0 = null;
while (enumeration.hasMoreElements()) {
wlan0 = enumeration.nextElement();
if (wlan0.getName().equals("wlan0")) {
return wlan0;
}
}
return null;
}
Sau đó, tạo ra một ổ cắm Multicast với một cổng có sẵn và thiết lập Wifi networkinterface của bạn.
MulticastSocket multicastSocket = new MulticastSocket();
/* Set NetworkInterface of MultiCast Socket */
NetworkInterface wifiNetworkInterface = findWifiNetworkInterface();
if (wifiNetworkInterface != null) multicastSocket.setNetworkInterface(wifiNetworkInterface);
Sau đó, phần còn lại của quá trình triển khai của bạn vẫn giữ nguyên. Và một khi bạn đã làm xong với Multicast Lock, bạn nên phát hành nó.
Tôi rất muốn nghe nếu bạn đã cố gắng giải quyết vấn đề này. Cách tôi hiểu nó là bạn cần một multicastlock để có được multicast hoạt động. Và cách duy nhất để thu hút một là mặc dù wifimanager.Thật không may với thiết bị được thiết lập như một điểm phát sóng, có vẻ như khóa multicast được tạo trên giao diện eth0, trong khi giao tiếp thực tế đang diễn ra tại wl0.1. m đi đúng hướng. – Petrus
Tương tự ở đây ....... – zaf
Khá nhiều điều tương tự ở đây. Cả hai thiết bị đều đang phát sóng, nhưng chúng không thể "nhìn thấy" được. –