• How do I force android WiFi Direct group owner to use 2.4 GHz instead of 5 GHz


    https://stackoverflow.com/questions/61140789/how-do-i-force-android-wifi-direct-group-owner-to-use-2-4-ghz-instead-of-5-ghz

    0


    I've been trying to connect WiFi legacy devices to my group owner using WiFi Direct. The legacy devices only support 2.4 GHz so when I try to scan APs from the devices they don't find the android phone group owner. I do however see the group owner from my desktop and other devices. I've done a iw dev wlo1 scan on my Linux machine where the only difference I can see is the frequency of the group owner is at freq: 5500. If I place the android device in AP hotspot mode the frequency switches over to 2.4 GHz where the devices also find this on scanning.

    Can I toggle the band in code? There's a builder class android.net.wifi.p2p.WifiP2pConfig.Builder https://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.Builder that seems to have this functionality but I can't access it since it's a new release API level 29. Any advice would be appreciated, I don't see why the bands aren't settable.

    Used to create the group owner:

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

     I would like to add a config such as manager.createGroup(channel, config, ... but doesn't seem the band can be set in the config for API < 29. I've tried on a low-end Android device and the device uses 2.4GHz for the WiFi Direct network but on a high-end device is used 5GHz is used.


    Answers

    You can change the frequency of the Group SoftAP by changing the channel it's operating on.

    2.4GHz band uses 1-11 Channels (Depends on the country).

    5GHz band uses 32 and above.

    You can achieve this by using reflection to access the setWifiP2pChannels() which is a hidden function.

    Here is the code i use to set wifi channels:

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

     Make sure that the Group AP is running before you change the channel.

    -----------------------------------------------------------------------

    saikrishna279 led me in the right direction. However, creating the AP before changing the channel didn't work for me. The frequency change was ignored.

    Create the group owner after adjusting the frequency like this:

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

     This prevented any inconsistencies and gave me a 2GHz response every time, running sudo iw dev wlo1 scan | grep -B 10 -A 20 "SSID: DIRECT" in terminal to see the changes.

  • 相关阅读:
    杂文: 日剧《轮到你了》第7集中的组合数学问题
    CF 板刷总结
    【题解】P2324 [SCOI2005]骑士精神
    【模板】 $ ext{K}$ 短路
    P4554 小明的游戏
    [题解]P1856 [USACO5.5]矩形周长Picture
    洛谷P2243 电路维修
    【题解】洛谷P3660 [USACO17FEB]Why Did the Cow Cross the Road III
    【题解】P1119 灾后重建
    集福卡活动
  • 原文地址:https://www.cnblogs.com/ztguang/p/15832447.html
Copyright © 2020-2023  润新知