Как я могу подключить Интернет по Wi-Fi?

#android #kotlin #android-connectivitymanager

Вопрос:

Когда устройство Android не подключено к Интернету, я собираюсь проверить, можно ли подключить Wi-Fi к данным в режиме реального времени и подключиться к определенному Wi-Fi.

Данные о соединении

 private val TAG = "ConnectionLiveData"  class ConnectionLiveData(context: Context) : LiveDatalt;Booleangt;() {   private lateinit var networkCallback: ConnectivityManager.NetworkCallback   private val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager  private val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager   private val validNetworks: MutableSetlt;Networkgt; = HashSet()   private fun checkValidNetworks() {  postValue(validNetworks.size gt; 0)  }   override fun onActive() {  networkCallback = createNetworkCallback()  val networkRequest = NetworkRequest.Builder()  .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)  .build()  connectivityManager.registerNetworkCallback(networkRequest, networkCallback)  }   override fun onInactive() {  connectivityManager.unregisterNetworkCallback(networkCallback)  }   private fun createNetworkCallback() = object : ConnectivityManager.NetworkCallback() {  override fun onAvailable(network: Network) {  Log.d(TAG, "---Location onAvailable: $network")  val networkCapabilities = connectivityManager.getNetworkCapabilities(network)  val hasInternetCapability = networkCapabilities?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)  Log.d(TAG, "---Location onAvailable: $network, $hasInternetCapability")  if (hasInternetCapability == true) {  CoroutineScope(Dispatchers.IO).launch {  val hasInternet = DoesNetworkHaveInternet.execute(network.socketFactory)  if (hasInternet) {  withContext(Dispatchers.Main) {  Log.d(TAG, "onAvailable: adding network. $network")  validNetworks.add(network)  checkValidNetworks()  }  }  }  }else {  Log.d(TAG, "There is no active network")  }  }   override fun onLost(network: Network) {  Log.d(TAG,  "The application no longer has a default network. The last default network was $network"  )  validNetworks.remove(network)  checkValidNetworks()  }   override fun onCapabilitiesChanged(  network: Network,  networkCapabilities: NetworkCapabilities  ) {  Log.d(TAG, "The default network changed capabilities: $networkCapabilities")  }   override fun onLinkPropertiesChanged(  network: Network,  linkProperties: LinkProperties  ) {  Log.d(TAG, "The default network changed link properties: $linkProperties")  }  } }  

Диспетчер соединений

 @Singleton class ConnectivityManager @Inject constructor(  application: Application, ) {  private val connectionLiveData = ConnectionLiveData(application)   // observe this in ui  val isNetworkAvailable = mutableStateOf(false)   fun registerConnectionObserver(lifecycleOwner: LifecycleOwner){  connectionLiveData.observe(lifecycleOwner) { isConnected -gt;  isConnected?.let { isNetworkAvailable.value = it }  }  }   fun unregisterConnectionObserver(lifecycleOwner: LifecycleOwner){  connectionLiveData.removeObservers(lifecycleOwner)  } }  

А затем, когда я подключаю Wi-Fi, он регистрируется вот так.

 2021-11-27 10:09:10.808 28100-28143/com.connectapp D/ConnectionLiveData: ---Location onAvailable: 152 2021-11-27 10:09:10.810 28100-28143/com.connectapp D/ConnectionLiveData: ---Location onAvailable: 152, true 2021-11-27 10:09:10.812 28100-28143/com.connectapp D/ConnectionLiveData: The default network changed capabilities: [ Transports: WIFI Capabilities: NOT_METEREDamp;INTERNETamp;NOT_RESTRICTEDamp;TRUSTEDamp;NOT_VPNamp;VALIDATEDamp;NOT_ROAMINGamp;FOREGROUNDamp;NOT_CONGESTEDamp;NOT_SUSPENDED LinkUpBandwidthgt;=1048576Kbps LinkDnBandwidthgt;=1048576Kbps SignalStrength: -56] 2021-11-27 10:09:10.814 28100-28143/com.connectapp D/ConnectionLiveData: The default network changed link properties: {Network Interface} 2021-11-27 10:09:10.885 28100-28100/com.connectapp D/ConnectionLiveData: onAvailable: adding network. 152  

Но когда я удаляю сохраненные данные Wi-Fi на устройстве, он не возвращает журнал Поэтому мой вопрос заключается в следующем: когда устройство Android не подключено к Интернету, подключитесь к определенному Wi-Fi. Как я могу его подключить?

Комментарии:

1. Не обращаясь к документации, я предполагаю, что они никоим образом не позволят приложениям делать это по соображениям безопасности.

2. @Thenfour04 Не могли бы вы рассказать мне больше о соображениях безопасности?