我的接收器在 Moto G 中没有收到任何 UDP 数据包,但它适用于其他设备。
通过 WiFi 网络,我已经成功地从其他设备发送了 UDP 数据包。但是在 Moto E 和 Moto G 中它不起作用。
谁能帮助弄清楚为什么它不适用于 Moto G/E?
我的问题是我没有通过 WiFi 网络接收任何 UDP 数据包。
我遇到了完全相同的问题!UDP 数据包适用于除 Moto E 之外的每部手机。然后我发现了一些非常有趣的信息interwebz。
问题是 Moto E(可能还有 Moto G)需要应用程序来获取WifiManager.MulticastLock. 从android 文档-
允许应用程序接收 Wifi 多播数据包。通常,Wifi 堆栈会过滤掉未明确寻址到此设备的数据包。获取 MulticastLock 将导致堆栈接收寻址到多播地址的数据包。处理这些额外的数据包会导致明显的电池消耗,在不需要时应禁用。
您需要为您的应用添加以下权限 -
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中获得一个像这样的锁 -
WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null){
WifiManager.MulticastLock lock = wifi.createMulticastLock("Log_Tag");
lock.acquire();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |