當前位置:編程學習大全網 - 編程語言 - MulticastLock 組播鎖 有什麽用

MulticastLock 組播鎖 有什麽用

Android的Wifi默認不處理組播流量,所以很多需要組播支持的服務就沒法用,比如在線的電視直播

網上有壹些方法,能開啟組播支持,我給您找來壹個參考下:

可以手動獲取組播鎖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();方法

  • 上一篇:multisim中的電流源在哪裏?
  • 下一篇:加工中心可以加工哪些工件
  • copyright 2024編程學習大全網