2012-05-31 37 views
5

Một số cơ quan có thể giúp tôi giải quyết vấn đề này không?Cách tự động kết nối WiFi với SSID được chỉ định?

Đây là mã của tôi và tại số mWifi.enableNetwork(netID, true), không thể bật mạng và không thể tự động kết nối với mạng được chỉ định. Vì vậy, tôi muốn biết nơi tôi đã phạm sai lầm?

public class WifiConnActivity extends Activity { 
    /** Called when the activity is first created. */ 
    final String tag = "WifiConn:..."; 
    EditText txt; 
    WifiManager mWifi; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 

     txt = (EditText)findViewById(R.id.editText1); 

     Button b1 = (Button)findViewById(R.id.B1);   
     b1.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) 
      { 

       if (mWifi.startScan()) //scan now 
       { 
        Log.d(tag, "startScan()"); 

        List<ScanResult> sRet = mWifi.getScanResults(); //scan results. 

        for (int i=0; i<sRet.size(); i++) 
        { 
         ScanResult retS = sRet.get(i); 
         txt.append("resT: " + retS.SSID +" " + retS.BSSID + "\n"); 
         Log.d(tag, "resT: " + retS.SSID +" " + retS.BSSID); 

         if (retS.SSID.equalsIgnoreCase("TEST")) 
         { 
          txt.append("Found: " + retS.SSID +" " + retS.BSSID + "\n"); 

          WifiConfiguration wc = new WifiConfiguration(); 

          wc.SSID = "\""+retS.SSID+"\""; 
          wc.BSSID = retS.BSSID; 
          wc.status = WifiConfiguration.Status.ENABLED; 
          wc.hiddenSSID = true; 

          int netID = mWifi.addNetwork(wc); // add network 
          txt.append("addNetwork: "+ Integer.toString(netID) +"\n"); 

          if(mWifi.enableNetwork(netID, true)) // enable network, but cannot work??????????? 
          { 
           txt.append("enableNetwork: true\n"); 
          } 
         } 
        } 

       } 
      } 

     });  
    } 
} 
+0

Vui lòng đăng đầu ra từ các Log.i() s khác nhau của bạn. – QED

+0

Không hoạt động ở phần cuối của tôi – theLazyFinder

Trả lời

2

Tôi nghĩ bạn cần thêm WifiConfiguration.KeyMgmt vào đối tượng WifiConfiguration của mình. Giả sử đó là mạng mở:

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

Ngoài ra, hãy thận trọng khi cho rằng kết quả quét có sẵn ngay khi thoát khỏi cuộc gọi đến startScan(). Đặt cược tốt nhất trong trường hợp này là thêm BroadcastReceiver trên WifiManager.SCAN_RESULTS_AVAILABLE_ACTION và thêm vào tất cả mã của bạn từ mWifi.getScanResults() chuyển tiếp. Bạn sẽ cần phải thêm một cuộc gọi đến mWifi.reconnect() khi bạn nhận được enableNetwork() để thành công.

Để khởi tạo WifiConfiguration wc, tôi rất thích nếu bạn muốn xem bài đăng của tôi here. Cuối cùng, một câu trả lời hay khác là here.

+0

. đó là câu trả lời. Cảm ơn. –

0

thử thêm thông tin còn lại về mạng chẳng hạn như thuật toán mã hóa cho phép, chương trình Mangement chủ chốt và PSK (nếu bạn đang sử dụng một)

Thứ hai kiểm tra trong danh sách các mạng cấu hình đầu tiên để đảm bảo rằng bạn don 't cố gắng để thêm một mạng khác với cấu hình tương tự như không có điểm làm điều đó.

Như một đề xuất không khởi độngScan() và đợi kết thúc. Đăng ký SCAN_RESULTS_AVAILABLE_ACTION và sử dụng gọi lại từ bộ thu phát sóng đến hoạt động của bạn để xử lý các kết quả đó.

Các vấn đề liên quan