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());
}
}
我的接收器在 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());
}
}