網上有壹些方法,能開啟組播支持,我給您找來壹個參考下:
可以手動獲取組播鎖MulticastLock;
不過MulticastLock 是不能直接獲得的,必須通過WIFIManager獲得
看下google的api:MulticastLock api
這裏邊包含有多個方法,其中:acquire() Locks Wifi Multicast on until release() is called.
release() Unlocks Wifi Multicast, restoring the filter of packets not addressed specifically to this device and saving power.
這兩個就是我們要用到的!
acquire()方法是獲取組播鎖,當我們接收完組播信息之後,要記得調用release()方法釋放組播鎖,節省資源
下面貼下獲取組播鎖的代碼:
private MulticastLock mLock;
private void allowMulticast(){
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mLock = wifiManager.createMulticastLock("multicast.avcit");
mLock.acquire();
}
很簡單的壹個方法!
然後就是編寫代碼獲取組播信息,獲取組播信息和java普通的獲取UDP信息是壹樣的,只是使用的是DatagramSocket的子類MulticastSocket來獲取信息,
private int port = 2068;
private String group_ip;
private MulticastSocket mSocket; //組播
private DatagramPacket inPacket;
private InetAddress group;
private byte[] buffer = new byte[1024];
private void initSocket(){
try {
group = InetAddress.getByName(group_ip);
mSocket = new MulticastSocket(port);
//設置緩沖區大小
mSocket.setReceiveBufferSize(rBuffLen);
mSocket.joinGroup(group); //設置加入組播組
//設置組播組數據包回送模式,為true表示不接受自己發送的數據包
mSocket.setLoopbackMode(true);
inPacket = new DatagramPacket(buffer, buffer.length);
while(threadState){
mSocket.receive(inPacket);
definitionData(inPacket.getData());//這裏調用自己解析數據的方法
}
} catch (IOException e) {
e.printStackTrace();
}
}
最後記得調用mLock.release();方法