要在Android中获取组播锁并接收UDP广播包,可以使用以下代码示例:
首先,在AndroidManifest.xml文件中添加以下权限:
然后,在你的Activity或Service中使用以下代码示例来获取组播锁并接收UDP广播包:
import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private MulticastLock multicastLock;
private MulticastSocket multicastSocket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取WifiManager实例
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
// 获取组播锁
multicastLock = wifiManager.createMulticastLock("myMulticastLock");
multicastLock.acquire();
// 开启接收UDP广播包的线程
new Thread(new Runnable() {
@Override
public void run() {
try {
// 创建MulticastSocket实例
multicastSocket = new MulticastSocket(12345);
InetAddress multicastAddress = InetAddress.getByName("224.0.0.1");
multicastSocket.joinGroup(multicastAddress);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
// 接收UDP广播包
multicastSocket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
Log.d(TAG, "Received: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 释放组播锁
if (multicastLock != null && multicastLock.isHeld()) {
multicastLock.release();
}
// 关闭MulticastSocket
if (multicastSocket != null) {
multicastSocket.close();
}
}
}
这段代码创建了一个MulticastLock实例来获取组播锁,然后创建了一个MulticastSocket实例来接收UDP广播包。在Activity或Service的onDestroy()方法中释放组播锁并关闭MulticastSocket。
确保在AndroidManifest.xml文件中添加了必要的权限,并将上述代码示例中的IP地址和端口号更改为你实际使用的组播地址和端口号。