2014-12-05 35 views
5

Próbuję połączyć dwa urządzenia za pomocą Wi-Fi Direct, ale chcę, aby zaimplementować programowo nie inicjowane przez użytkownika.Android zmiany nazwy urządzenia do wifi-direct

I za to muszę zmienić nazwę urządzenia Wi-Fi Direct jest jak na zdjęciu poniżej:

enter image description here

Teraz odkryć rówieśników stosując następujące metody:

wifiP2pManager.discoverPeers(channel, 
       new WifiP2pManager.ActionListener() { 

        @Override 
        public void onSuccess() { 
         Log.d(TAG, "onSuccess"); 
        } 

        @Override 
        public void onFailure(int reason) { 
         Log.d(TAG, "onFailure"); 
        } 
       }); 

połączyć się konkretnego uczestnika poprzez następujący kod:

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) { 

     } 
    }); 
} 

Ale ja nie k jak zmienić nazwę urządzenia Wi-Fi Direct?

+0

Czy udało Ci się znaleźć rozwiązanie tego problemu? –

Odpowiedz

4

to co pracował dla mnie, chociaż ja nie polecam przy użyciu odbicia dostęp do ukrytych funkcji API w 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(); 
    } 

} 
+0

co to jest menedżer i kanał? comeon odpowie lepiej. Menedżer – David

+3

to WifiP2pManager, a kanał to WifiP2pManager.Channel, którego używamy do połączenia naszej aplikacji ze strukturą p2p Wi-Fi. przy okazji, jeśli próbowałeś poznać podstawy dotyczące WifiP2p lub nawet przeczytać samouczek na temat tego, jak zacząć, wiedziałbyś, jaki jest menedżer i kanał, proszę odnieść się do tego: http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html –

+0

@Dostęp do tych dwóch można zdefiniować w następujący sposób: 'Menedżer WifiP2pManager = (WifiP2pManager) getSystemService (Context.WIFI_P2P_SERVICE); Kanał Kanał = mManager.initialize (to getMainLooper(), zero); ' i nie zapomni importu te ' import android.net.wifi.p2p.WifiP2pManager; ' ' importu android.net. wifi.p2p.WifiP2pManager.Channel; ' – iko

Powiązane problemy