마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 와이파이 연결 질문입니다.

0 추천

제가 현재 와이파이 무선랜을 이용해서 접속하려고 하는데, networkID 값이 계속 -1값만 가지고 있네요... 무슨 문제인지 잘 모르겠어요.



    private AdapterView.OnItemClickListener ItemListener = new AdapterView.OnItemClickListener() {  // 리스트 뷰의 이벤트 리스너
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            strItem = wifiSSID.get(position);                                                       //내가 누른 위치의 포지션의 string 타입을 얻어옴
            SSIDTextView.setText(strItem);                                                         //SSID 텍스트뷰에 SSID이름을 바꿈.
        }
    };


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        IntentFilter filter = new IntentFilter();
        filter.addAction(wifiManager.WIFI_STATE_CHANGED_ACTION);              //와이파이 상태 변경액션을 필터에 추가

        wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifiInfo = wifiManager.getConnectionInfo();                             //와이파이 상태를 가져온다.
        togglestate(wifiManager.getWifiState());                                 //어플을 켜기전에 와이파이가 켜져있을수도 있으므로 Wstate 상태를 가져옴.
        wifiSSID = new ArrayList<>();
        ////////////////////////////////////////////////////////////////////////////  UI부분
        PassWordtext = (EditText) findViewById((R.id.Password));
        SSIDTextView = (TextView) findViewById(R.id.SSIDText);
        list = (ListView) findViewById(R.id.listview);
        list.setOnItemClickListener(ItemListener);


        SearchButton = (Button) findViewById(R.id.Searchbutton);               //서치버튼 리스너
        SearchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub
                if (WState) {                                                                      //와이파이 상태 체크 Search버튼 누를시 와이파이가 안켜져있으면 작동 x
                    Toast.makeText(getApplicationContext(), "Starting scan", Toast.LENGTH_LONG).show();
                    StartScan();
                } else {
                    Toast.makeText(getApplicationContext(), "WiFi is not running", Toast.LENGTH_LONG).show();
                }

            }
        });
        ConnectButton = (Button) findViewById(R.id.Connectbutton);          //연결버튼 리스너
        ConnectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // TODO Auto-generated method stub

                if (wifiManager.getWifiState() == WIFI_STATE_ENABLED) {                      //와이파이가 enable된 상태면
                    SSID = ("" + SSIDTextView.getText());                                  //아까 리스트뷰를 눌러 세팅한 SSID를 얻어옴
                    Password = ("" + PassWordtext.getText());                              //패스워드를 입력하면 그 패스워드를 얻어옴
                    if (SSIDTextView.getText().equals("None")) {                            //아직 listview를 클릭 안해서 이름명이 안바꼈을때.
                        Toast.makeText(getApplicationContext(), "list click first", Toast.LENGTH_LONG).show();      //아직 리스트뷰를 클릭 안했으면 먼져 클릭해라.
                    } else {
                        Log.i("TAG", ""+SSID +"dd"+ Password);
                        ConnetWifi(SSID, Password);                                                                  //이미 눌렀으면 아이디와 패스워드로 접속
                    }
                } else {                                                                            //켜져 있는 상황이 아니면 작동중이 아니다.
                    Toast.makeText(getApplicationContext(), "WiFi is not running", Toast.LENGTH_LONG).show();
                }

            }
        });





        for (int i = 0; i < wifiScanList.size(); i++) {                                                 //아까 받아들인 스캔 결과를 SSID와 BSSID값만 받아옴.
            wifis[i] = ((wifiScanList.get(i).SSID).toString() + " -> " + (wifiScanList.get(i).BSSID).toString());
            wifiSSID.add(wifiScanList.get(i).SSID.toString());                                         //그 받아들인 SSID를 접속시 사용해야 하기때문에 등록.
        }
        list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),                               //리스트 어뎁터. 원래있던 simple리스트 아이템 1 설정으로
                android.R.layout.simple_list_item_1, wifis));                                       //와이파이에 저장한 그 두 정보를 저장.
    }


    public void ConnetWifi(String ssid, String password) {


        wfc.SSID = "\"".concat(ssid).concat("\"");
        wfc.status = WifiConfiguration.Status.DISABLED;
        wfc.priority = 40;


        //Capabilites 가 Open 일때 설정방법입니다. (한마디로 키값없이 바로 접속할수 있다)

        wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wfc.allowedAuthAlgorithms.clear();
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);


        //이제 WEP  방식 입니다.


        wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
        wfc.wepKeys[0] = "\"".concat(password).concat("\"");
        wfc.wepTxKeyIndex = 0;


        //그다음 WPA, WPA2 방식입니다.


        wfc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
        wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        wfc.preSharedKey = "\"".concat(password).concat("\"");
        Log.i("TAG", "gogo");

        wifiManager   = (WifiManager) getSystemService(Context.WIFI_SERVICE);     //  와이파이 setup
        //위의 방식으로 WifiConfiguration 을 설정해주시고 아래의 방법으로 접속하면 된다.
        networkId = wifiManager.addNetwork(wfc);    //연결하기위해 네트워크 아이디 저장
        Log.i("TAG", "gogo" + networkId);
        Log.i("TAG", "is connect:"+ wifiManager.enableNetwork(networkId, true));
        Log.i("TAG", "is connect:" + wifiManager.enableNetwork(networkId, false));
        enableNet(networkId);
        if (networkId != -1) {
            wifiManager.enableNetwork(networkId, true); //와이파이를 연결하는 함수.
            Log.i("TAG", "true");
        }
    }
    public void enableNet(int networkId){
        wifiManager.enableNetwork(networkId, true);
        Log.i("TAG", "dkshk");
    }


    protected void onDestroy() {
        unregisterReceiver(wifiReceiver);           //와이파이 등록한 레지스터 종료
    }

}

급하게 몇개 지웠네요 질문에 필요한거랑 몇개 더 추가했습니다.

현재 와이파이를 켜고 서치를 한후 SSID와  BSSID를 리스트 뷰에 보여지게 하고

그 리스트 뷰를 클릭할경우 그 값의 SSID를 텍스트 뷰에 settext 해서 보여지고  비번을 edittext로 설정해 그값을 지속적으로 바꿀수 있게 만들어, ssid와 password를 gettext로 받아 그 값을 connetwifi(ssid,password)에 넣게 만들었는데

networkid 값이 계속 -1값이 들어가고 아예 값이 안들어가네요. 매니페스트도 설정했고 그랬는데 뭐가 문제인지 잘 모르겠네요 ㅠㅠㅠㅠ 도와주세요

yeboykr (180 포인트) 님이 2015년 8월 10일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...