2012-06-21 39 views
19

Tôi đang làm việc trên một ứng dụng có wifi, nơi người dùng sẽ được yêu cầu nhập mật khẩu cho mạng được quét mà người dùng chọn, nếu người dùng nhập mật khẩu chính xác, nó sẽ kết nối và hoạt động tốt. Nhưng khi người dùng nhập sai mật khẩu, một mạng mới sẽ được thêm vào với tên đó, và sẽ không xác thực được cos mật khẩu sai, và nó sẽ có trạng thái vấn đề xác thực.Làm thế nào để quên một mạng không dây trong Android lập trình?

Bây giờ nếu người dùng cố gắng quét và chọn cùng một mạng và nhập đúng mật khẩu, nó không kết nối được ngay cả khi mật khẩu đã chính xác và sẽ bị vô hiệu hóa vì kết nối trước vẫn hiển thị trạng thái sự cố xác thực.

Cách giải quyết vấn đề này? Có cách nào để quên tất cả các mạng bằng ConnectivityManager hoặc wifimanager không? Hoặc bất kỳ giải pháp nào khác?

Trả lời

7

WifiManager nguồn, có phương pháp này:

/* 
* Delete the network in the supplicant config. 
* 
* This function is used instead of a sequence of removeNetwork() 
* and saveConfiguration(). 
* 
* @param config the set of variables that describe the configuration, 
*   contained in a {@link WifiConfiguration} object. 
* @hide 
*/ 

public void forgetNetwork(int netId) { 
    if (netId < 0) { 
     return; 
    } 
    mAsyncChannel.sendMessage(CMD_FORGET_NETWORK, netId); 
} 

Nhưng phương pháp này là @hide, vì vậy chúng ta không thể sử dụng nó. Tuy nhiên, theo nhận xét này:

Chức năng này được sử dụng thay cho một chuỗi các removeNetwork()saveConfiguration()

Bạn có thể cố gắng sử dụng: removeNetwork()saveConfiguration() để thay thế.

+0

removeNetwork() giải quyết vấn đề. Cảm ơn nhiều! :) – Aadi

3

Bạn có thể sử dụng phương thức removeNetwork() để xóa kết nối mạng dự phòng (mặc dù tôi nghi ngờ nếu chúng có cùng số netId) và sau đó thêm kết nối mới để tránh sự cố bạn đang gặp phải.

+2

removeNetwork() đã giải quyết được vấn đề! trong khi, thiết lập cấu hình, tôi đọc networkID thành một biến, để khi mạng không kết nối được, tôi đã xóa nó bằng cách sử dụng cùng một id trong 'removeNetwork()' :) – Aadi

13

Có, removeNetwork() hoạt động. Tôi đã sử dụng tính năng này để xóa tất cả các mạng.

List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
for(WifiConfiguration i : list) { 
    wifiManager.removeNetwork(i.networkId); 
    wifiManager.saveConfiguration(); 
} 
0

Bằng cách thực hiện việc này, bạn có thể nhận danh sách các mạng được định cấu hình trong danh sách, sau đó thực hiện xóa và lưu ngay lập tức.

WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for(WifiConfiguration i : list) { 
      wifiManager.removeNetwork(i.networkId); 
      wifiManager.saveConfiguration(); 
     } 
Các vấn đề liên quan