제가 현재 와이파이 무선랜을 이용해서 접속하려고 하는데, 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값이 들어가고 아예 값이 안들어가네요. 매니페스트도 설정했고 그랬는데 뭐가 문제인지 잘 모르겠네요 ㅠㅠㅠㅠ 도와주세요