Android переименовать имя устройства для wifi-direct

Я пытаюсь подключить два устройства с помощью Wifi Direct, но я хочу реализовать программно не по инициативе пользователя.

И для этого мне нужно изменить имя устройства WifiDirect, как показано ниже:

Введите описание изображения здесь

Теперь найдите сверстников, используя следующие методы:

wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { Log.d(TAG, "onSuccess"); } @Override public void onFailure(int reason) { Log.d(TAG, "onFailure"); } }); 

Подключитесь к определенному узлу через следующий код:

 public static void connectPeer(WifiP2pDevice device, WifiP2pManager manager, Channel channel, final Handler handler) { WifiP2pConfig config = new WifiP2pConfig(); config.groupOwnerIntent = 15; config.deviceAddress = device.deviceAddress; config.wps.setup = WpsInfo.PBC; manager.connect(channel, config, new ActionListener() { @Override public void onSuccess() { } @Override public void onFailure(int reason) { } }); } 

Но я не знаю, как изменить название устройства для Wi-Fi Direct?

Это то, что сработало для меня, хотя я не рекомендую использовать рефлексию для доступа к скрытым API-интерфейсам в WifiP2pManager.

 public void setDeviceName(String devName) { try { Class[] paramTypes = new Class[3]; paramTypes[0] = Channel.class; paramTypes[1] = String.class; paramTypes[2] = 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 ActionListener() { @Override public void onSuccess() { LOG.debug("setDeviceName succeeded"); } @Override public void onFailure(int reason) { LOG.debug("setDeviceName failed"); } }; setDeviceName.invoke(manager, arglist); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }