gpt4 book ai didi

android - 是否需要 CHANGE_WIFI_MULTICAST_STATE 权限和使用 WifiManager.MulticastLock 才能在 Android 上接收多播数据包?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:02 25 4
gpt4 key购买 nike

我有一个测试应用程序,我用它来演示多播流量是否正在进入 Android 设备。我看到的行为似乎与 Google 的文档相矛盾 herehere这意味着需要满足两个先决条件才能让应用程序接收多播流量:

  1. 获取多播锁
  2. 将 CHANGE_WIFI_MULTICAST_STATE 权限添加到应用的 list

我的应用程序能够接收多播流量,而无需这些项目中的任何一项。下面是设置多播套接字以接收数据的代码 fragment 。

MulticastSocket multicastReceiveSocket = new MulticastSocket( 18200 );
multicastReceiveSocket.joinGroup( InetAddress.getByName( "232.232.232.232" ) );

byte[] buffer = new byte[ 65536 ];
DatagramPacket packet = new DatagramPacket( buffer, buffer.length );
multicastReceiveSocket.receive( packet );

这应该发生吗?如果没有这两个先决条件中的任何一个,我是否应该能够接收多播数据包?我注意到 MulticastLock 文档说:

Normally the Wifi stack filters out packets not explicitly addressed to this device

这是否意味着行为可能因一台设备而异?我正在运行 Android 版本 4.4.4 的三星 Galaxy Note4(型号 SM-N910T)上测试我的应用程序。非常感谢对此问题的任何澄清。

最佳答案

WifiManager.MulticastLock 在获取时,将修改设备上 Wifi 接口(interface)的状态(全局),以允许所有应用程序接收多播流量。如果您的应用想要获取此锁,您的应用将需要 CHANGE_WIFI_MULTICAST_STATE 权限。

在您的情况下,如果在未获取此锁的情况下接收到多播流量,则必须意味着要么

(1) 一些其他应用已获得此锁,因此,接口(interface)现在也正在解析/过滤和传送多播数据包。

(2) 设备制造商在开发设备时忽略了此 android api,接口(interface)始终传送所有多播流量。

API 的描述并没有强制制造商仅在应用程序获得此锁定时才允许多播流量。

无论如何,如果应用想要可靠地接收多播流量,它们必须获得此锁。

关于android - 是否需要 CHANGE_WIFI_MULTICAST_STATE 权限和使用 WifiManager.MulticastLock 才能在 Android 上接收多播数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com