How change the device name in WiFi direct p2p?

5.6k views Asked by At

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?!

3

There are 3 answers

2
user3409573 On

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

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