2012-04-18 2 views
2

아래 코드를 사용하여 Android 프로필에 무선 프로필을 만듭니다. 어떤 이유에서인지 매번 새로운 프로파일을 생성하므로 전화기는 동일한 무선 네트워크에 대해 여러 개의 프로파일을 갖습니다. 이미 존재한다면 새로운 프로파일을 생성하지 못하게 할 방법이 있습니까?Java - 이미 존재하는 경우 무선 네트워크에 연결하는 방법?

import android.app.Activity; 
import android.os.Bundle; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiManager; 
import android.util.Log; 
import android.widget.TextView; 

public class IVMOBILEActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState); 
    TextView tv = new TextView(this);  
    TextView status = new TextView(this);     


    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\"MyNetwork\""; //IMP! This should be in Quotes!! 

    wc.hiddenSSID = true; 
    wc.status = WifiConfiguration.Status.ENABLED;  
    wc.priority = 10; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.preSharedKey = "\"Password\""; 
    WifiManager wifiManag = (WifiManager) this.getSystemService(WIFI_SERVICE); 
    boolean res1 = wifiManag.setWifiEnabled(true); 
    int res = wifi.addNetwork(wc); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean es = wifi.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es); 
    boolean b = wifi.enableNetwork(res, true);  
    Log.d("WifiPreference", "enableNetwork returned " + b); 

    tv.setText("You are now connected! " + 
      "Version 1.0"); 

    status.setText("The was an error connecting, please try again."); 

    try { 

     Thread.sleep(5000); 

     ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (connec != null && (connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) ||(connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED)){ 
       //You are connected, do something online. 
       setContentView(tv); 

      }else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {    
       //Not connected.   
       setContentView(status); 
      } 

    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 






} 


} 

답변

2

WifiManager에 추가하기 전에 먼저 확인하십시오. 의사 코드 예 :

//Check if this SSID is already stored. If it is, return that configuration. 
//If not, return the configuration being tested. 
public WifiConfiguration checkPreviousConfiguration(WifiConfiguration wc) { 
    List<WifiConfiguration configs = wifi.getConfigurations(); 
    for(WifiConfiguration config : configs) { 
     if(config.SSID.equals(wc.SSID)) return config; 
    } 
    return wc; 
} 

//...... 
int res = wifi.addNetwork(checkPreviousConfiguration(wc)); 

의미가 있습니까?

편집 : 분명히, 당신은 아마 (SSID를 반드시 고유 식별자하지 않기 때문에) 그냥 SSID를 넘어 다른 요인에 대해 확인하고, 새로운 WifiConfiguration 인스턴스를 구성하기 전에 이들에 대해 검사 할 것이다, 그러나 이것은 종류 내가 시작할 것이라고 생각했다.

+0

응답 해 주셔서 감사합니다. 상태를 표시 할 수 있도록 진행률 표시 줄을 어떻게 감쌀 것입니까? – user1342164

+0

제 말은, 이와 같은 방법의 지연이 사용자에게 눈에 띄기까지 충분히 길다는 것을 상상할 수 없습니다. 하지만 안드로이드의 진행률 표시 줄에 대한 경험이 없습니다. 별개의 질문을하는 것이 가장 좋습니다. – kcoppock

+0

감사합니다! 나는 너의 제안을 시도 할 것이다. – user1342164

관련 문제