Как изменить имя устройства в прямой прямой p2p?

Возможно ли изменить имя устройства WiFi напрямую через код? Я пытался:

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

Но, очевидно, это не сработает. Есть идеи?!

Следующий код использует Reflection api для Java, он менее предпочтителен из-за отсутствия эффективности, но Android не предоставляет другого способа, поэтому вы можете использовать его, используя обаяние:

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

Этот код работает для меня.

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