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

Posted 张同光 (Tongguang Zhang)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.

 

以上是关于How do I force android WiFi Direct group owner to use 2.4 GHz instead of 5 GHz的主要内容,如果未能解决你的问题,请参考以下文章

How do I install uudecode?

How do I code well?

[转]How do I use variables in Oracle SQL Developer?

How do I UPDATE from a SELECT in SQL Server?

How do I unmute my Lenovo laptop?

How do I run Adobe Flash on Chrome?