2014-01-09 54 views
3

我正在嘗試創建可以在局域網中查找所有設備的應用程序。我已經能夠通過ping IP範圍來做到這一點。還有其他方法可以做到這一點嗎?Android中的設備發現

是否有可能通過在android中偵聽傳入數據包來檢測相同網絡中的設備?

+0

請看看http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html –

回答

1

下面的代碼將搜索設備,並把他們的信息在一個列表: -

 //an array list of DeviceList type, which will take the info from getter setters 
    ArrayList<DeviceList> Dlist = new ArrayList<DeviceInfo>(); 
    wifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    if(wifi.isWifiEnabled()){ 

    List<ScanResult>wifilist =wifi.getScanResults(); 

    if(wifilist != null){ 
    for(int m = 0; m < wifilist.size(); m++) 
    { 
     int signallevel = WifiManager.calculateSignalLevel(wifilist.get(m).level,20); 
     int signalStrength=(signallevel*100)/20; 
     DeviceList dInfo = new DeviceList(); 
     dInfo.setDeviceName((wifilist.get(m).SSID)); 
     dInfo.setSignalStrength(String.valueOf((signalStrength+"%"))); 
     dInfo.setDeviceType("WiFi"); 

     Dlist.add(dInfo); 
    } 
}  

,你需要一些這方面的getter setter方法。您可以在不同的類中添加它們如下: -

public class DeviceList { 

    String DeviceName=""; 
    String SignalStrength=""; 
    String deviceType=""; 

    public String getDeviceName() { 
    return DeviceName; 
    } 
    public void setDeviceName(String deviceName) { 
    DeviceName = deviceName; 
    } 
    public String getSignalStrength() { 
    return SignalStrength; 
    } 
    public void setSignalStrength(String signalStrength) { 
    SignalStrength = signalStrength; 
    } 
    public String getDeviceType() { 
    return deviceType; 
    } 
    public void setDeviceType(String deviceType) { 
    this.deviceType = deviceType; 
    } 
} 
+0

謝謝你的回覆。上面的代碼給了我所有可用的wifi網絡列表。但是我想讓所有連接到與我的設備連接的網絡\路由器的設備。 – StyleDude

0

這取決於你想用設備做什麼。

要發現UPNP兼容設備,可以使用Cling庫。

這將返回可用設備,說明和服務的列表。

Ping IP範圍將只顯示響應ping的設備,並且可能取決於網絡設置。