2017-03-29 5 views
0

Ich habe keine Erfahrung mit der App-Entwicklung und soll jetzt eine App in Android Studio erstellen, die über WiFi-Direct mit einem Sensor verbindet. Ich habe auf WiFi-direct gelesen und versucht, die Führer https://developer.android.com/guide/topics/connectivity/wifip2p.html und https://stuff.mit.edu/afs/sipb/project/android/docs/training/connect-devices-wirelessly/wifi-direct.html zu folgen, aber wenn ich ihren Code benutze, habe ich noch keine Ahnung, wie man vorwärts geht. Ich habe auch mehrere Demo-Apps für WiFi direkt angeschaut.So erstellen Sie eine Schaltfläche, die WiFi direkt startet

Mein Code sieht im Moment so aus.

Broadcast-Empfänger:

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver { 

private WifiP2pManager mManager; 
private WifiP2pManager.Channel mChannel; 
private MainActivity mActivity; 

public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel, 
            MainActivity activity) { 
    super(); 
    this.mManager = manager; 
    this.mChannel = channel; 
    this.mActivity = activity; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { 
     // Check to see if Wi-Fi is enabled and notify appropriate activity 
     int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); 
     if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { 
      mActivity.setIsWifiP2pEnabled(true); 
     } else { 
      mActivity.setIsWifiP2pEnabled(false); 
     } 

    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { 
     // Call WifiP2pManager.requestPeers() to get a list of current peers 
    } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { 
     // Respond to new connection or disconnections 
    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { 
     // Respond to this device's wifi state changing 
    } 
} 
} 

MainActivity:

public class MainActivity extends AppCompatActivity { 

WifiP2pManager mManager; 
WifiP2pManager.Channel mChannel; 
private boolean isWifiP2pEnabled = false; 
BroadcastReceiver mReceiver; 
IntentFilter mIntentFilter; 


public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled) { 
    this.isWifiP2pEnabled = isWifiP2pEnabled; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mIntentFilter = new IntentFilter(); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); 
    mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); 


    mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 
    mChannel = mManager.initialize(this, getMainLooper(), null); 
    mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this); 

} 

/* register the broadcast receiver with the intent values to be matched */ 
@Override 
protected void onResume() { 
    super.onResume(); 
    mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this); 
    registerReceiver(mReceiver, mIntentFilter); 
} 
/* unregister the broadcast receiver */ 
@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(mReceiver); 
} 



} 

Der nächste Teil in der Führung ist, dass ich versuchen sollte, Peers zu entdecken. Wo sollte ich diesen Code implementieren?

mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() { 

    @Override 
    public void onSuccess() { 
     // Code for when the discovery initiation is successful goes here. 
     // No services have actually been discovered yet, so this method 
     // can often be left blank. Code for peer discovery goes in the 
     // onReceive method, detailed below. 
    } 

    @Override 
    public void onFailure(int reasonCode) { 
     // Code for when the discovery initiation fails goes here. 
     // Alert the user that something went wrong. 
    } 
}); 

Mein Endprodukt sollte eine Taste sein, dass, wenn ich es drücke ich für Peers gesucht werden soll und der Lage sein, ein zu verbinden. Der Sensor startet direkt im WLAN. Weiß jemand, wo ich mehr Informationen darüber finden kann, wie ich vorgehen soll, oder habe ich Tipps, welche Klassen ich brauche und so?

Vielen Dank!

Antwort

0

Die Funktionsweise ist durch:

  • discoverPeers aufrufen, wenn Sie auf die Schaltfläche
  • Weiter tippen, in Ihrem WiFiDirectBroadcastReceiver ->WIFI_P2P_PEERS_CHANGED_ACTION Zustand, fordern Sie die Liste der verfügbaren Peers wie folgt aus: mManager.requestPeers(mChannel, peerListListener);
  • Dann müssen Sie WifiP2pManager.PeerListListener in Ihrer Aktivität oder im Fragment implementieren, da die erkannten Peers zu dieser Methode zurückkehren:

    @Override public void onPeersAvailable(WifiP2pDeviceList peerList) {}

  • Sobald Sie die Liste von Peers haben, können Sie zu jedem Peer mManager.connect(mChannel, config, new ActionListener() {});

mit verbinde ich folgende glauben ist https://developer.android.com/guide/topics/connectivity/wifip2p.html gut genug, um die api zum Laufen zu bringen.

Goodluck.

+0

danke! Sollte ich die Liste der Peers in der OnRecieve-Methode anfordern oder eine separate Methode wie "public void DiscoverPeers()" oder so etwas erstellen? – user7772159

+0

Ja, in der "OnReceive", wo der Kommentar requestPeers -> sonst if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals (Aktion)) { // Rufen WifiP2pManager.requestPeers(), um eine Liste der aktuellen Peers erhalten } – JAD

Verwandte Themen