2014-12-05 12 views
5

Sto provando a connettere due dispositivi tramite Wifi Direct, ma voglio implementarlo a livello di programmazione non dall'utente avviato.Nome del dispositivo di rinominazione di Android per wifi-direct

E per questo devo cambiare il nome di Wi-Fi Direct del dispositivo come l'immagine sotto:

enter image description here

Ora scoprire coetanei utilizzando metodi seguenti:

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

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

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

Collegare al particolare tra pari via seguente codice:

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

     } 
    }); 
} 

Ma io non so ora come cambiare il nome del dispositivo per Wi-Fi Direct?

+0

sei riuscito a trovare una soluzione per questo? –

risposta

4

questo è ciò che ha funzionato per me, anche se non è consigliabile utilizzare reflection per accedere alle API nascoste in 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

qual è il gestore e il canale? comeon rispondi meglio. Il gestore di – David

+3

è WifiP2pManager e il canale è WifiP2pManager.Channel che utilizziamo per connettere la nostra app al framework wifi p2p. a proposito, se hai provato a conoscere le nozioni di base su WifiP2p o addirittura a leggere un singolo tutorial su come iniziare, sapresti quale gestore e canale sono, fai riferimento a questo: http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html –

+0

@David questi due possono essere definiti come segue 'WifiP2pManager manager = (WifiP2pManager) getSystemService (Context.WIFI_P2P_SERVICE); canale Canale = mManager.initialize (questo, getMainLooper(), null); ' e non dimenticare importare questi ' import android.net.wifi.p2p.WifiP2pManager; '' importazione android.net. wifi.p2p.WifiP2pManager.Channel; ' – iko

Problemi correlati