【问题标题】:How do I force android WiFi Direct group owner to use 2.4 GHz instead of 5 GHz如何强制 android WiFi Direct 组所有者使用 2.4 GHz 而不是 5 GHz
【发布时间】:2020-07-23 05:33:52
【问题描述】:

我一直在尝试使用 WiFi Direct 将 WiFi 旧设备连接到我的群组所有者。旧设备仅支持 2.4 GHz,因此当我尝试从设备扫描 AP 时,他们找不到 android 手机组所有者。但是,我确实从我的桌面和其他设备上看到了组所有者。我在我的 Linux 机器上做了一个iw dev wlo1 scan,我能看到的唯一区别是组所有者的频率是freq: 5500。如果我将 android 设备置于 AP 热点模式,频率会切换到 2.4 GHz,设备也会在扫描时发现这一点。

我可以在代码中切换波段吗?有一个构建器类 android.net.wifi.p2p.WifiP2pConfig.Builder https://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.Builder 似乎具有此功能,但我无法访问它,因为它是新版本的 API 级别 29。任何建议将不胜感激,我不看看为什么乐队不能设置。

用于创建群主:

private void createGroupOwner() {
    manager.createGroup(channel, new WifiP2pManager.ActionListener() {
        @Override
        public void onSuccess() {
            Toast.makeText(MainActivity.this, "Group Created", Toast.LENGTH_SHORT).show();
            manager.requestGroupInfo(channel, getGroupOwner());
        }

        @Override
        public void onFailure(int reason) {
            Toast.makeText(MainActivity.this, "Failed to connect", Toast.LENGTH_SHORT).show();
        }
    });
}

我想添加一个配置,例如manager.createGroup(channel, config, ...,但似乎无法在 API

【问题讨论】:

    标签: android wifi-direct


    【解决方案1】:

    您可以通过更改其运行的频道来更改 Group SoftAP 的频率。

    2.4GHz 频段使用 1-11 个频道(取决于国家/地区)。

    5GHz频段使用32及以上。

    您可以通过使用反射访问setWifiP2pChannels() 来实现这一点,这是一个隐藏函数。

    这是我用来设置 wifi 频道的代码:

    Method setWifiP2pChannels = wifiP2pManager.getClass()
                        .getMethod("setWifiP2pChannels", WifiP2pManager.Channel.class, int.class, int.class, WifiP2pManager.ActionListener.class);
                setWifiP2pChannels.invoke(wifiP2pManager, p2pChannel, 0, channel, new WifiP2pManager.ActionListener() {
                    @Override
                    public void onSuccess() {
                        Log.d(TAG, "Changed channel (" + channel + ") succeeded");
                    }
    
                    @Override
                    public void onFailure(int reason) {
                        Log.e(TAG, "Changed channel (" + channel + ")  failed");
                    }
                });
            } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                Log.e(TAG, "Changed channel (" + channel + ")  failed(EXCEPTION) ", e);
            }
    

    在更改频道之前确保 Group AP 正在运行。

    【讨论】:

      【解决方案2】:

      saikrishna279 引导我朝着正确的方向前进。但是,在更改频道之前创建 AP 对我不起作用。频率变化被忽略了。

      这样调整频率后创建群主:

      try {
              int channel_setting = 1;
              Method setWifiP2pChannels = manager.getClass().getMethod("setWifiP2pChannels", WifiP2pManager.Channel.class, int.class, int.class, WifiP2pManager.ActionListener.class);
              setWifiP2pChannels.invoke(manager, channel, 0, channel_setting, new WifiP2pManager.ActionListener() {
                  @Override
                  public void onSuccess() {
                      createGroupOwner();
                      Log.d(TAG, "Changed channel (" + channel + ") succeeded"); // change the channel if it does not work
                  }
      
                  @Override
                  public void onFailure(int reason) {
                      // TODO enter log here
                      Toast.makeText(_activity, "Failed to change to 2.4GHz", Toast.LENGTH_SHORT).show();
                  }
              });
          } catch (Exception e) {
              e.printStackTrace();
          }
      

      这防止了任何不一致,并且每次都给我一个 2GHz 的响应,在终端中运行 sudo iw dev wlo1 scan | grep -B 10 -A 20 "SSID: DIRECT" 以查看更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 2016-08-20
        • 1970-01-01
        相关资源
        最近更新 更多