2015-01-08 3 views
0

내 수신기가 Moto G에서 UDP 패킷을 수신하지는 않지만 다른 장치에서도 잘 작동합니다.Moto G dosent가 WIFI 네트워크를 통해 UDP 패킷을 수신합니다.

WiFi 네트워크를 통해 다른 장치에서 UDP 패킷을 성공적으로 보냈습니다. 그러나 Moto E와 Moto G에서는 작동하지 않습니다.

아무도 Moto G/E에서 작동하지 않는 이유를 알아낼 수 있습니까?

내 문제는 내가 WiFi 네트워크를 통해 UDP 패킷을받지 못했다는 것이 었습니다.

+0

귀하의 궁금한 점은 무엇입니까? – BDL

답변

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

정확히 같은 문제가 발생했습니다. UDP 패킷은 모토 E를 제외한 모든 전화기에서 작동합니다. 그런 다음 interwebz에 대한 매우 흥미로운 정보를 발견했습니다.

문제는 Moto E (그리고 아마도 Moto G)가 앱이 WifiManager.MulticastLock을 획득하도록 요구한다는 것이 었습니다. android documentation -

애플리케이션이 Wi-Fi 멀티 캐스트 패킷을 수신 할 수 있도록합니다. 일반적으로 와이파이 스택은이 기기로 명시 적으로 주소 지정되지 않은 패킷을 걸러냅니다. 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(); 
} 
+0

솔루션을 제공해 주셔서 감사합니다. 이 코드를 사용해 보겠습니다 ... –

+1

고마워요. – harsha

+0

저를 위해 일하지 않았습니다. 실제로 수신 대기하도록 서버를 설정할 때 wifi 서비스에 대해 아무 것도 지정하지 않아도됩니다 (예 : https://github.com/fabriph/some-android-apps/blob/master/UDPBroadcast/src/com/fabriph). /udpbroadcast/UDPServer.java –

관련 문제