【发布时间】:2020-03-11 15:21:06
【问题描述】:
我正在制作一个连接到作为接入点的树莓派的安卓应用程序。手机连接到接入点是这样的:
String SSID = "Alarm";
String pass = "Alarm123"
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + SSID + "\"";
conf.preSharedKey = "\"" + pass + "\"";
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
if(!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
int netId = wifiManager.addNetwork(conf);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
这很好用。在此之后,手机需要向网络广播一个 UDP 数据包,我这样做是这样的:
try {
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
byte[] message = "013A2610E3882D08".getBytes();
DatagramPacket packet = new DatagramPacket(message, message.length, InetAddress.getByName("255.255.255.255"), 2002);
socket.send(packet);
System.out.println("Packet sent");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
问题是在手机上启用移动数据时,我需要接收数据包的地方没有收到数据包。我认为这是由于树莓派的接入点无法访问互联网,因此移动数据也保持启用状态,并且数据包被发送到移动连接而不是 wifi 网络。当我禁用移动数据时,它确实有效。
我寻找一种以编程方式禁用移动数据的方法,但我发现从 Android 4.4 开始不再可行。
我当然可以显示一个提示,要求用户禁用移动数据,但我宁愿找到一种方法将数据包广播到 wifi 网络而不是移动网络,即使两者都已启用。有没有办法做到这一点?
【问题讨论】: