Moto G dosent 通过 WIFI 网络接收 UDP 数据包

Moto G dosent receive UDP packets over WIFI Network

我的接收器在 Moto G 中没有收到任何 UDP 数据包,但它适用于其他设备。

通过 WiFi 网络,我已从其他设备成功发送 UDP 数据包。但在 Moto E 和 Moto G 中它不起作用。

谁能帮忙弄清楚为什么它不适用于 Moto G/E?

我的问题是我没有通过 WiFi 网络接收任何 UDP 数据包。

我运行遇到了完全一样的问题! UDP 数据包可以在除 Moto E 之外的每个 phone 上工作。然后我在 interwebz.

上发现了一些非常有趣的信息

问题是 Moto E(可能还有 Moto G)需要应用获取 WifiManager.MulticastLock。来自 android documentation -

Allows an application to receive Wifi Multicast packets. Normally the Wifi stack filters out packets not explicitly addressed to this device. Acquring a MulticastLock will cause the stack to receive packets addressed to multicast addresses. Processing these extra packets can cause a noticable battery drain and should be disabled when not needed.

您需要为您的应用添加以下权限 -

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

然后在你的代码中像这样获取一个锁 -

WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null){
    WifiManager.MulticastLock lock = wifi.createMulticastLock("Log_Tag");
    lock.acquire();
}

试试这个代码。这对我有用。

 public void run() {
        Looper.prepare();
        try {
          WifiManager.MulticastLock lock;
          WifiManager wifi;

          wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
          if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
          if (lock == null)
          lock = wifi.createMulticastLock("WiFi_Lock");
          lock.setReferenceCounted(true);
          lock.acquire();
         }
      }
      catch(Exception e)
      {
        Log.d("Wifi Exception",""+e.getMessage().toString());
      }
    }