私はユーザーが次の手順に従う必要があるアプリケーションに取り組んでいます。
ユーザーが接続されているオブジェクトの専用ホットスポットに接続されている場合、アプリケーションはそれを構成するためにいくつかのHTTP要求を実行します。次に、ステップ1のグローバルWiFiへのアプリケーションを自動的に再接続したいと思います。
API 21からAPI 28まで、私が電話を再接続したいSSIDを知っているので、この機能は非常に簡単です。数列のコードで行うことができます。
private fun changeCurrentWifiNetworkLegacy(ssidToConnect: String) {
val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
var ssidIdentifier: Int? = null
wifiManager.configuredNetworks?.forEach { config ->
Log.d("SSID", config.SSID)
if (config.SSID == "\"${ssidToConnect}\"") {
ssidIdentifier = config.networkId
}
}
ssidIdentifier?.let { id ->
wifiManager.enableNetwork(id, true)
}
}
_
API 29このシンプルなコードは、この記事によればもう機能しません. https://developer.android.com/about/version/10/privacy/changes#configure-wifi
記事によると、今、私は2つのクラスを使用する必要があります。WifiNetworkSpecifier
および/またはWifiNetworkSuggestion
。
残念ながら、ユーザーを前の設定されたSSIDに接続するには、これらのクラスを使用して実行例を見つけることができません。
誰かがすでにそれを達成しますか?
ご協力ありがとうございました。
次のコードでどのネットワークに接続するかを設定できます。
_if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(
WifiNetworkSpecifier.Builder()
.setSsid("My ssid")
.build()
)
.build()
cm.requestNetwork(networkRequest, object: ConnectivityManager.NetworkCallback() {
override fun onUnavailable() {
Log.d("TEST", "Network unavailable")
}
override fun onAvailable(network: Network) {
Log.d("TEST", "Network available")
}
})
}
_
これにより、ConnectivityManagerの NetworkRequest メソッドを使用して、特定のSSIDを使用してネットワークを要求します。
この方法では、_Settings.System.canWrite(Context)
で決定されたように、呼び出し側に_Manifest.permission.CHANGE_NETWORK_STATE
_権限またはシステム設定を変更する機能を保持する必要があります。
より多くの情報を得ることができる情報については、 NetworkCallback クラスを参照してください。
(編集:輸送タイプの追加の追加。)
さらに編集:.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
を使用して正しく機能する必要がありました。 WiFinetWorkspecifierでは
ローカルWiFiネットワークを要求するためにのみ使用できます(I.Eインターネット機能なし)
によると ドキュメント
これにより、デバイスのポップアップの要求が表示されますが、最終的に求めたWiFiネットワークが私に表示されます。