Android-Anwendung Wi-Fi-Gerät - AP-Konnektivität
Bin ich eine Anwendung erstellen, die Daten übertragen können zwischen einem mobilen und einem Wi-Fi-Gerät... Der mobile hat die AP aktiviert (durch den code) und ein anderes Gerät eine Verbindung zu diesem spezifischen Netzwerk... Wie kann ich das erkennen durch code zu sehen, die details der Geräte an das Netzwerk angeschlossen(AP)?** Gibt es dafür eine Lösung?
Habe ich gesehen, eine Anwendung namens Wifi Hot spot in HTC Desire, die diese Funktionalität zeigt die IP-Adressen der mit dem Netzwerk verbundenen Geräte. Wie kann das erreicht werden?
Check-out Kritik: Sprint Mobilen Hotspot auf dem HTC EVO 4G.
Es zeigt eine Anwendung, die eigentlich anzeigen der verbundenen Benutzer. Wie können wir das programmatisch? Gibt es eine API dafür?
Für die Erstellung eines access-points:
private void createWifiAccessPoint() {
if (wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(false);
}
Method[] wmMethods = wifiManager.getClass().getDeclaredMethods(); //Get all declared methods in WifiManager class
boolean methodFound = false;
for (Method method: wmMethods){
if (method.getName().equals("setWifiApEnabled")){
methodFound = true;
WifiConfiguration netConfig = new WifiConfiguration();
netConfig.SSID = "\""+ssid+"\"";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
//netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
//netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
//netConfig.preSharedKey = password;
//netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
//netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
//netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
//netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
try {
boolean apstatus = (Boolean) method.invoke(wifiManager, netConfig,true);
//statusView.setText("Creating a Wi-Fi Network \""+netConfig.SSID+"\"");
for (Method isWifiApEnabledmethod: wmMethods)
{
if (isWifiApEnabledmethod.getName().equals("isWifiApEnabled")){
while (!(Boolean)isWifiApEnabledmethod.invoke(wifiManager)){
};
for (Method method1: wmMethods){
if(method1.getName().equals("getWifiApState")){
int apstate;
apstate = (Integer)method1.invoke(wifiManager);
// netConfig = (WifiConfiguration)method1.invoke(wifi);
//statusView.append("\nSSID:"+netConfig.SSID+"\nPassword:"+netConfig.preSharedKey+"\n");
}
}
}
}
if(apstatus)
{
System.out.println("SUCCESSdddd");
//statusView.append("\nAccess Point Created!");
//finish();
//Intent searchSensorsIntent = new Intent(this,SearchSensors.class);
//startActivity(searchSensorsIntent);
}
else
{
System.out.println("FAILED");
//statusView.append("\nAccess Point Creation failed!");
}
}
catch (IllegalArgumentException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
if (!methodFound){
//statusView.setText("Your phone's API does not contain setWifiApEnabled method to configure an access point");
}
}
Ok....ich bin programmgesteuert herstellen zu können, einen WLAN-Access-point... Jetzt wird in der Lage sein, zu erkennen, die Geräte mit diesem Netzwerk verbunden sind ?
Wo sehen Sie essablish der Access-Point? Auf einem Nicht-Android-Gerät? Dann ja. Auf Android wird es ziemlich schwierig, ohne root-Zugriff, um die Daten in eine normale app.
Ich bin zur Gründung der access point auf einem android-Gerät...
Dein code funktioniert einwandfrei, aber auf meinem htc desire, wenn ich auf die hot-spot-Programm - DHCP deaktiviert..... WARUM???????
InformationsquelleAutor Arun Abraham | 2011-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte man Lesen, die
/proc/net/arp
- Datei und Lesen Sie alle ARP Einträge. Siehe das Beispiel in dem blog-post Android: Howto finden Sie die hardware-MAC-Adresse von einem remote-host. In der ARP-Tabelle, suchen Sie für alle hosts, die gehören zu Ihrem Wi-Fi-Netzwerk, basierend auf der IP-Adresse.Hier ist Beispiel-code, der zählt die Anzahl der hosts, die mit dem AP verbunden. Dieser code setzt Voraus, dass ein ARP-Eintrag für das Telefon an das Netzwerk angeschlossen und die restlichen sind von hosts mit dem AP verbunden.
wie wussten Sie, dass Sie für den Zugriff auf diese Datei ??/proc/net/arp... keine Quelle für diese??
/proc ist ein standard-linux-Datei-system, das gibt eine Menge an Informationen über die kernel. Finden Sie die details über das /proc/net auf linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html . Google-Suche nach /proc geben Sie eine Menge an info.
Dies ist falsch, da die ARP-Tabellen nicht unbedingt aktualisieren, wenn ein Gerät die Verbindung trennt. Man sagen, dass Sie konnte einfach ping alle VORRICHTUNGEN in der Tabelle, um zu sehen, welche IP-Adressen aktiv sind, aber es ist durchaus möglich, dass ein Gerät ist hinter einer Firewall, reagiert nicht auf ICMP-Anfrage und dein ping fehlschlagen würde. Diese Lösung, obwohl Sie arbeiten, nicht robust und genau.
Also,... gibt es eine andere alternative Lösungen @MridangAgarwalla für die überprüfung der clients noch verbunden sind oder nicht?
InformationsquelleAutor Paul
Könnte man ping das Gerät, wenn Sie den host-Namen oder seine IP-Adresse.
Könnten Sie tun, eine IP-Adresse Scannen, zu versuchen alle IP-Adresse im Netzwerk für eine Antwort mit einem ping wie oben beschrieben oder versuchen, eine Verbindung mit TCP oder UDP.
Wenn Sie wissen, die MAC-Adresse, könnten Sie die ARP Tabelle.
Wenn du einige eigene software läuft auf den Geräten, Sie könnten senden von UDP-Paketen auf jedem Gerät und hören Sie Sie auf Ihrem Android-Gerät. Sehen Senden und empfangen von UDP-broadcast-Pakete in Android auf, wie dies zu tun.
Siehe mein edit oben.
IN meine "Anforderung", ich habe einen WLAN controller, der eine Verbindung zu dem Gerät(nehmen Sie zum Beispiel ein mobile, in dem ich die app installiert, ich habe AP aktiviert und von dem anderen Gerät habe ich mit diesem Netzwerk verbunden sind)... nun, wie finde ich heraus in das Gerät(installierte app), die mit dem Netzwerk verbundenen Geräte.. senden von UDP-Paketen erfordern würde, die mich zum installieren einer anderen app auf dem anderen Gerät..naja..wie muss ich das hören für UDP-Pakete?
Ich bearbeitet meine Anforderung... hast du eine Idee oder Lösung???
Bitte denken Sie daran, dass, wenn die firewall/router Tropfen ICMP-Pakete dann der ping nicht funktionieren würde. Sie könnten auch versuchen, die Vereinfachung der obigen Lösung durch senden von broadcast-pings.
InformationsquelleAutor theomega
Können Sie accesspoint:
InformationsquelleAutor Daniel Martí