0

ホットスポットを介して2台の電話を接続する必要がある場所を実行しています。

2 つのボタン (SEND と RECEIVE) があります。受信ボタンを押すと、ホットスポットがアクティブになります。人が SEND ボタンを押すと、そのホットスポットに接続する必要があります。

私はすでにここで多くの調査を行っており、コードを作成するのに大いに役立ちましたが、まだ機能していません。addNetwork メソッドは有効な ID を返し、enableNetwork は true を返しますが、それでもホットスポット ネットワークに接続しません。他のものを無効にしますが、ホットスポットには接続しません。

ホットスポットは、設定やwifiなどを介して参加できるため、うまく作成されています.

これが私のコードです:

ボタンのリスナーは次のとおりです。

      protected void setUpButtonListeners(){
       Log.i("SETUP BUTTON LISTENERS", "SETTING UP THE BUTTON LISTENERS");

    wificonfiguration=new WifiConfiguration();
    setUpTheWifiConfiguration(wificonfiguration);
    wifimanager = (WifiManager) HighwayActivity.this.getSystemService(HighwayActivity.this.WIFI_SERVICE);
    wifimanager.setWifiEnabled(true);

    Button sendButton= (Button) findViewById(R.id.send);
    Button receiveButton = (Button) findViewById(R.id.receive);
    sendButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0)
        {
                netID = wifimanager.addNetwork(wificonfiguration);
                Log.e("NET ID ::: ", "O net id is : "+ netID);

                boolean asad=wifimanager.disconnect();
                Log.e("wifi.manager disconnect"," bool is "+asad );
                boolean aux =  wifimanager.enableNetwork(netID, true);
                Log.e("enableNetwork", "bool aux : " + aux);
                boolean reconnect=wifimanager.reconnect();
                Log.e("Recconect ::: ", " recnect is : "+ reconnect);

            wifireceiver=new WifiReceiver();
            registerReceiver(wifireceiver, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));

        }
    });

    receiveButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0)
        {

            try
            {
                wifimanager.setWifiEnabled(false);
                //USING REFLECTION TO GET METHOD "SetWifiAPEnabled"
                Method method=wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
                method.invoke(wifimanager, wificonfiguration, true);

                Toast.makeText(HighwayActivity.this, "Craeted a hotspot with the SSID : " + wificonfiguration.SSID, Toast.LENGTH_SHORT).show();

            }
            catch (NoSuchMethodException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IllegalArgumentException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (IllegalAccessException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (InvocationTargetException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

}

これが私のwifi構成です:(私はそれらの両方を試しました)

    protected void setUpTheWifiConfiguration(WifiConfiguration wificonfiguration){
    wificonfiguration.SSID = "\"" + mySSID + "\"";

    wificonfiguration.preSharedKey = "\"" + "pwteste123A"+ "\"";
    /*
    wificonfiguration.status = WifiConfiguration.Status.ENABLED;
    wificonfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    wificonfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    wificonfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
   // wificonfiguration.hiddenSSID = true;
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    wificonfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    wificonfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    wificonfiguration.priority = 40;
    */
    // No security
    wificonfiguration.status = WifiConfiguration.Status.DISABLED;
    wificonfiguration.priority = 40;

              wificonfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    wificonfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    wificonfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    wificonfiguration.allowedAuthAlgorithms.clear();
    wificonfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    wificonfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wificonfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
}
4

1 に答える 1

0

私はすでに問題を解決しました。

まず、クライアント側の SSID にさらに 2 つの引用符を追加する必要がありました。次に、WifiConfiguration からすべての GroupCiphers を削除し、ステータスを有効に変更する必要があり、優先度を設定する必要はありませんでした。

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

            conf.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);

            conf.preSharedKey="\"password\"";
            conf.hiddenSSID = true;
            conf.status = WifiConfiguration.Status.ENABLED;

            conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

            int netid=wifi.addNetwork(conf);

            List<WifiConfiguration> list = wifi.getConfiguredNetworks();
            for( WifiConfiguration i : list ) {

                if(i.SSID != null && i.SSID.equals("\"" + "TinyBox" + "\"")) {
                    Log.d("cONFIG nETOWKRS", "Found List of COnfigured Networks Tinybox");
                    try {
                        boolean b=wifi.disconnect();

                        boolean enab=wifi.enableNetwork(i.networkId, true);

                        wifi.reconnect();
                        break;
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }

ありがとう、これが将来他の人に役立つことを願っています

于 2016-07-27T11:38:52.343 に答える