UDP 在 Android 7+ 上是否不再允许发送?

5次阅读
没有评论

问题描述

反映其应用程序在较新的 Android 版本(如 Samsung S8 和 OnePlus3T)上无法通过 UDP 发送广播包,但在旧款设备上运行正常。怀疑是否有新设置或 Android 自身逻辑变更导致这一情况。

解决方案

注意:Android 7+ 的部分设置可能会影响网络行为,请谨慎操作并做好备份。

方案1 – 检查多播设置

使用 setMulticastTTLbindLocalAddress 方法以确保允许多播和广播:
在 Android 代码中,当绑定 socket 或建立 UDP 连接时,需要正确配置这些参数。具体操作如下:

DatagramSocket socket = new DatagramSocket();
// 设置 TTL 值 (0-255),通常设为1可以让数据包仅限于局域网。
int ttlValue = 1;
boolean success = socket.setMulticastTTL(ttlValue);
if (!success) {
    Log.e("UDP", "Unable to set multicast TTL");
}

// 绑定本地地址,确保只能从指定网络接口发送
LocalSocketAddress srcName = new InetSocketAddress("255.255.255.255".getBytes(), 1134);
boolean bindSuccess = socket.bind(srcName);
if (!bindSuccess) {
    Log.e("UDP", "Unable to bind local address");
}

方案2 – 检查 WiFi 或者互联网连接设置

对于有线的 WiFi 配置,Android 系统在没有 Internet 连接时会有所不同。某些权限和网络行为可能会被限制:

  1. 检查当前应用的 Internet 权限确保应用程序有足够的权限访问 Internet。
    xml
    <uses-permission android:name="android.permission.INTERNET"/>

  2. 设置并检视 WiFi 配置文件,以确认是否允许广播和 UDP 通信:

  3. 在设备上查找 Settings -> Developer options (如果启用了 “Developer Options”) 并查看是否有相关设置。
    • 检查是否有针对特定应用或所有应用的 WiFi 和互联网连接限制。

方案3 – 测试与检查其他应用程序

通过测试其他应用以确定这一问题是否仅限于特定应用程序。这有助于排除个别代码实现的问题,或者发现系统层面的变更。

注意事项

  1. 及时更新设备和 Android 系统:确保设备运行的是最新版本。
  2. 咨询官方文档和社区支持以获取更多详细信息和技术资源。
  3. 请参考 Android 开发者文档了解详细说明和最新网络架构及其设置选项。

正文完