Purpose 尝试连接或切换到一个特定的WiFi网络,无需任何人工干预(除用户名和密码外)。
Code Snippet
主要活动.kt
class MainActivity : AppCompatActivity() {
private var lastSuggestedNetwork:WifiNetworkSuggestion? = null
var wifiManager:WifiManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
wifiManager = applicationContext.getSystemService(WIFI_SERVICE) as WifiManager
val button = findViewById<Button>(R.id.button) // Just a button in the layout file
button.setOnClickListener(View.OnClickListener {
wifiManager!!.disconnect()
connectUsingNetworkSuggestion(ssid = "AndroidWifi", password ="")
wifiManager!!.reconnect()
private fun connectUsingNetworkSuggestion(ssid: String, password: String) {
val wifiNetworkSuggestion = WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setWpa2Passphrase(password)
.build()
val intentFilter =
IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
return
showToast("Connection Suggestion Succeeded")
registerReceiver(broadcastReceiver, intentFilter)
lastSuggestedNetwork?.let {
val status = wifiManager!!.removeNetworkSuggestions(listOf(it))
Log.i("WifiNetworkSuggestion", "Removing Network suggestions status is $status")
val suggestionsList = listOf(wifiNetworkSuggestion)
var status = wifiManager!!.addNetworkSuggestions(suggestionsList)
Log.i("WifiNetworkSuggestion", "Adding Network suggestions status is $status")
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE) {
showToast("Suggestion Update Needed")
status = wifiManager!!.removeNetworkSuggestions(suggestionsList)
Log.i("WifiNetworkSuggestion", "Removing Network suggestions status is $status")
status = wifiManager!!.addNetworkSuggestions(suggestionsList)
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
lastSuggestedNetwork = wifiNetworkSuggestion
showToast("Suggestion Added")
private fun showToast(s: String) {
Toast.makeText(applicationContext, s, Toast.LENGTH_LONG).show()
AndroidManifest.xml权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
有了这个代码,设备就能连接到WiFi网络,但为此需要手动关闭和打开WiFi。一定有更好的方法来连接或切换到一个特定的WiFi网络,而无需任何手动操作。
Current process:
Run the application and click on button on the home screen to connect to WiFi.
Go to settings, disable and enable to WiFi
Device is connect to the desired WiFi network
Output
https://i.stack.imgur.com/zQ7Bo.png
摆脱步骤#2/以编程方式进行
Reference: Ref: 有可能在安卓Q上添加网络配置吗?
为了明确起见,这段代码中提到的SSID和密码是针对默认AVD的,只要把它改成任何其他WiFi网络的SSID和密码,它就能在物理设备上工作。我在Pixel 3XL上试了一下,有同样的问题。