如何查看连接到我的路由器的设备列表并选择其中一个,然后从中发送和接收数据

Posted

技术标签:

【中文标题】如何查看连接到我的路由器的设备列表并选择其中一个,然后从中发送和接收数据【英文标题】:How to view list of devices that is connected to my router and select one of them then send and receive data from it 【发布时间】:2015-07-27 14:23:45 【问题描述】:

我是 android 应用程序开发的新手,我想构建一个使用 wifi 连接到其他设备(不是移动设备)并将一些数据从我的手机发送到设备并从其他设备接收一些数据的应用程序。

我在本地网络中有什么:

    手机支持安卓系统wifi。 设备支持 wifi 连接(例如温度传感器)。

我需要什么:

    手机需要连接到路由器并接收可用设备列表并检查传感器是否连接到网络。 连接到传感器并从手机发送一条消息,告诉传感器测量温度。 传感器发回一条包含温度的消息。

【问题讨论】:

【参考方案1】:

你的问题我也不是很清楚。但据我了解,您希望在您的移动设备上列出一些支持 Wi-Fi 的设备,然后连接到其中一个设备并最终与它们通信。

要列出所有接入点,您必须实现以下代码。

private final BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver()
    @Override
    public void onReceive(Context c, Intent intent) 
        String action = intent.getAction();
        if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) 

            List<ScanResult> scanResults =  mainWifiObj.getScanResults();
            mScannedNetworksAdapter.clear();
            listView_Access_point.clearChoices();

            if (scanResults != null) 
                for (ScanResult result : scanResults) 
                    mScannedNetworksAdapter.add(result)                     
                
            

            listView_Access_point.setAdapter(mScannedNetworksAdapter);
    
   
;

现在 列出所有 Wi-Fi 接入点后,您必须单击其中一个才能连接。为此,您必须实现 OnItemClickListener,然后覆盖 onItemclick()。请参阅下面的代码。

@Override
public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) 

    ScanResult result = (ScanResult) parent.getItemAtPosition(position);

    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"" + result.SSID + "\"";

    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiManager.addNetwork(conf);

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    if(list!=null)
        for( WifiConfiguration i : list ) 
            if(i.SSID != null && i.SSID.equals("\"" + result.SSID + "\"")) 
                 wifiManager.disconnect();
                 wifiManager.enableNetwork(i.networkId, true);
                 wifiManager.reconnect();               
                 break;
                       
         

    

然后你必须实现一个广播接收器,它告诉接入点是否连接成功。

private final BroadcastReceiver mWifiConnectionEstablished = new BroadcastReceiver() 
    @Override
    public void onReceive(Context c, Intent intent) 

        String action = intent.getAction();
        if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) 

            NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

            if (NetworkInfo.State.CONNECTED.equals(nwInfo.getState()) && nwInfo.isConnected()) 
               //The connection is established. Now do your stuff here
            

         
    
;

最后有几种沟通方式。其中之一是套接字通信。您将在 google 中获得几个用于在 android 中进行套接字通信的示例。

【讨论】:

以上是关于如何查看连接到我的路由器的设备列表并选择其中一个,然后从中发送和接收数据的主要内容,如果未能解决你的问题,请参考以下文章

列出并连接到没有 MPVolumeView 的播放设备

怎样通过SecureCRT连接到CISCO路由器CONSOLE口

如何通过console口连接到交换机,并查看配置

如何在 iOS 上获取外部屏幕列表并连接到

从 iOS 应用程序中列出(并连接到)蓝牙设备

获取连接到 Android 设备的所有存储设备的路径列表