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

时间:2015-01-08 11:09:03

标签: android udp

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

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

任何人都可以帮忙弄明白为什么它不能用于Moto G / E吗?

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

2 个答案:

答案 0 :(得分:4)

我遇到了完全相同的问题!除了Moto E之外,每个电话都可以使用UDP数据包。然后我在interwebz上找到了一些非常有趣的信息。

问题在于Moto E(可能是Moto G)要求应用程序获得WifiManager.MulticastLock。来自android documentation -

  

允许应用程序接收Wifi多播数据包。通常是   Wifi堆栈过滤掉未明确指向此的数据包   设备。获取MulticastLock将导致堆栈接收   发往多播地址的数据包。处理这些额外的   数据包可能导致明显的电池耗尽,应禁用   什么时候不需要。

您需要将以下权限添加到您的应用中 -

<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();
}

答案 1 :(得分:2)

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

 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());
      }
    }