java - RemoveNetworkSuggestions 不会断开与 WiFi Android 的连接
问题描述
我正在尝试disconnectWiFi()
使用功能从 WiFi 网络断开连接,removeNetworkSuggestions
但设备仍保持连接到网络。我尝试将一个空 ArrayList 以及一个包含 NetworkSuggestion 的列表传递给该RemoveNetworkSuggestions
函数,但它们都没有解决问题。
public class SingleWifi extends AppCompatActivity {
private WifiManager wifiManager;
private Button disconnectButton;
List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion>();
@RequiresApi(api = Build.VERSION_CODES.Q)
@Override
protected void onCreate(Bundle savedInstanceState) {
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_wifi);
String wifiSSID = getIntent().getStringExtra("wifiList");
connectToNetwork(wifiSSID);
disconnectButton = findViewById(R.id.disconnectBtn);
disconnectButton.setEnabled(false);
disconnectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
disconnectWifi();
startActivity(new Intent(SingleWifi.this, MainActivity.class));
}
});
}
@RequiresApi(api = Build.VERSION_CODES.Q)
private void disconnectWifi() {
if(wifiManager != null) {
wifiManager.removeNetworkSuggestions(suggestionsList);
Toast.makeText(this,"Disconnect successful", Toast.LENGTH_SHORT).show();
}
}
@RequiresApi(api = Build.VERSION_CODES.Q)
private void connectToNetwork(String ssid) {
final WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setWpa2Passphrase("password")
.setIsAppInteractionRequired(true)
.build();
int statusCode = wifiManager.removeNetworkSuggestions(suggestionsList);
suggestionsList.add(suggestion);
final WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
int status = wifiManager.addNetworkSuggestions(suggestionsList);
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
Toast.makeText(this, "Connection success", Toast.LENGTH_LONG).show();
}
else if(status == WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE) {
Toast.makeText(this, "Already connected, update needed", Toast.LENGTH_LONG).show();
status = wifiManager.removeNetworkSuggestions(suggestionsList);
status = wifiManager.addNetworkSuggestions(suggestionsList);
}
final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
return;
}
// Post connection
disconnectButton.setEnabled(true);
}
};
getApplicationContext().registerReceiver(broadcastReceiver, intentFilter);
}
}
removeNetworkSuggestions 返回0
,因此它似乎确实产生了正确的输出,但似乎并没有真正断开与 Internet 的连接。
解决方案
我最终选择了一个完全不同的实现来摆脱 Wifinetworksuggestions API,因为这个问题似乎是一个未解决的错误,如下所示:https ://issuetracker.google.com/issues/140398818很遗憾,没有解决这个问题截至目前的问题。
推荐阅读
- c# - 为什么在添加运动控制器时角色会摔倒?
- audio - 有没有办法使用 Amplitude 类实时分析来自外部源的音频数据?
- r - Tidy multiple anovas
- php - 如何显示味精 php joomla
- kotlin - IntelliJ IDEA:为什么 readLine() 需要两个用户输入而不是一个使用 Kotlin 的输入?
- html - 我无法将我的 css 文件链接到我的 html 文件,并且在之前的任何帖子中都找不到我的问题的解决方案
- android - 在进行 UI 测试 Android 时打开/关闭位置
- datetime - 在没有值转换器的 xamarin 中设置 DateTimeFormat 区域性与当前区域性不同
- progressive-web-apps - 服务工作者无法缓存启动 url
- python - 将 python dict 数据写入 .csv 并更正格式