2014-12-05 5 views
5

Ich versuche, zwei Geräte mit WiFi Direct verbinden, aber ich möchte programmgesteuert nicht vom Benutzer initiiert werden.Android umbenennen Gerät den Namen für WiFi-Direct

Und dass ich Wi-Fi Direct den Namen des Geräts wie unten Bild ändern müssen:

enter image description here

Jetzt entdecken Peers folgenden Methoden:

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

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

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

Verbindung zu bestimmten Peer über folgenden Code:

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

     } 
    }); 
} 

Aber ich dont k Wie kann ich den Gerätenamen für Wi-Fi Direct ändern?

+0

Haben Sie es geschafft, eine Lösung dafür zu finden? –

Antwort

4

das ist, was für mich funktionierte, obwohl ich nicht empfehle, mit Reflection auf versteckte APIs im WifiP2pManager zuzugreifen.

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

Was ist der Manager und Kanal? Comeon antworte besser. – David

+3

Manager ist WifiP2pManager und Kanal ist WifiP2pManager.Channel, die wir verwenden, um unsere App mit dem Wifi P2P-Framework zu verbinden. Übrigens, wenn Sie versucht haben, die Grundlagen von WifiP2p zu kennen oder sogar ein Tutorial zu lesen, wie Sie beginnen sollen, würden Sie wissen, welcher Manager und welcher Kanal sind. Bitte beachten Sie hierzu: http://developer.android.com/training/ connect-devices-wirelessly/wifi-direct.html –

+0

@David diese beiden können wie folgt definiert werden 'WifiP2pManager Manager = (WifiP2pManager) getSystemService (Context.WIFI_P2P_SERVICE); Kanal channel = mManager.initialize (this, getMainLooper(), null); ' und vergessen Sie nicht importieren diese ' Import android.net.wifi.p2p.WifiP2pManager; '' Import android.net. wifi.p2p.WifiP2pManager.Channel; ' – iko

Verwandte Themen