10

Is it possibile to change the device name of WiFi direct through the code? I've tried to:

private WifiP2pDevice wDevice;
wDevice.deviceName = "newName";

But, obviously it doesn't work. Any idea?!

user3809345
  • 131
  • 2
  • 8
  • Is this question similar to the following? https://stackoverflow.com/questions/27315198/android-rename-devices-name-for-wifi-direct As in you want to change the device name of the one broadcasting? – Ebrahim Karam Apr 27 '19 at 05:37

3 Answers3

10

Following code use Reflection api of Java,It is less preferrable due to lack of efficiency but Android does not provide another way so, You can use it works with charm :

    try {
        Method m = wpm.getClass().getMethod(
                "setDeviceName",
                new Class[] { WifiP2pManager.Channel.class, String.class,
                        WifiP2pManager.ActionListener.class });

        m.invoke(WifiP2pManager wifimngr,WifiP2pManager.Channel wifichannel, new_name, new WifiP2pManager.ActionListener() {
            public void onSuccess() {
                //Code for Success in changing name
            }

            public void onFailure(int reason) {
                //Code to be done while name change Fails
            }
        });
    } catch (Exception e) {

        e.printStackTrace();
    }
Umang Kothari
  • 3,674
  • 27
  • 36
user3409573
  • 101
  • 1
  • 3
9

This code works for me.

WifiP2pManager manager;
WifiP2pManager.Channel channel;
    try {
       manager = (WifiP2pManager)getSystemService(Context.WIFI_P2P_SERVICE);
        channel = manager.initialize(this, getMainLooper(), new WifiP2pManager.ChannelListener() {
            @Override
            public void onChannelDisconnected() {
                manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
            }
        });
        Class[] paramTypes = new Class[3];
        paramTypes[0] = WifiP2pManager.Channel.class;
        paramTypes[1] = String.class;
        paramTypes[2] = WifiP2pManager.ActionListener.class;
        Method setDeviceName = manager.getClass().getMethod(
                "setDeviceName", paramTypes);
        setDeviceName.setAccessible(true);

        Object arglist[] = new Object[3];
        arglist[0] = channel;
        arglist[1] = devName;
        arglist[2] = new WifiP2pManager.ActionListener() {

            @Override
            public void onSuccess() {
                Log.d("setDeviceName succeeded", "true");
            }

            @Override
            public void onFailure(int reason) {
                Log.d("setDeviceName failed", "true");
            }
        };
        setDeviceName.invoke(manager, arglist);

    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
manichandra
  • 156
  • 1
  • 3
0
if (action.equals(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION))
{
    WifiP2pDevice device = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);
    // device.deviceName
}

this code works

Reference- How to get wifi direct devices name from WifiP2pDeviceList

madlymad
  • 6,367
  • 6
  • 37
  • 68