A veces se vuelve un desafío encontrar los detalles relacionados con la red, especialmente la dirección IP del dispositivo, que podría ser necesaria para otorgar preferencias únicas a través del software del módem. Debido a la variación en la información que se muestra al usuario en varios dispositivos Android (Samsung, Mi, Lava), implementamos una aplicación a través de la cual los detalles sobre la red actual se pueden obtener fácilmente y estar disponibles en un solo lugar. La información o las entidades sobre la conexión que extrajimos del dispositivo en nuestro programa fueron:
- Dirección IP : Es una etiqueta numérica delegada a cada dispositivo conectado que está conectado a una red que utiliza el Protocolo de Internet para la comunicación.
- Velocidad de enlace: es la velocidad máxima alcanzable (en Bits por segundo) a la que el dispositivo puede comunicarse con otro en la misma red.
- ID de red: es la parte de una dirección IP en la que reside un host. Identifica la red TCP/IP
- SSID (Identificador de conjunto de servicios): es una identificación única que consta de 32 caracteres que se utilizan para nombrar redes inalámbricas.
- SSID oculto: Igual que el SSID. Ocultar el SSID es una forma eficiente de proteger la red. Esto evita que la red aparezca en la lista de redes Wi-Fi disponibles cuando las personas buscan conexiones Wi-Fi cercanas.
- BSSID: El SSID mantiene los paquetes dentro de la WLAN correcta. Los paquetes son seguros incluso cuando hay WLAN superpuestas. Sin embargo, existen múltiples puntos de acceso dentro de cada WLAN. El Identificador de conjunto de servicios básicos (BSSID) identifica esos puntos de acceso y los clientes asociados y se incluye en todos los paquetes inalámbricos.
Desafortunadamente, algunas entidades, como la dirección MAC , no se pudieron recuperar correctamente y hay una razón genuina.
- Las direcciones MAC son globalmente únicas, lo que hace que todos los demás dispositivos sean únicos entre sí. Esta etiqueta no la puede restablecer el usuario y sobrevive a los restablecimientos de fábrica. Por lo tanto, no se prefiere identificar a los usuarios de forma única.
- A partir de Android 6.0 (API 23) y Android 9 (API 28) , las direcciones MAC de los dispositivos locales, como Bluetooth y Wi-Fi, no están disponibles a través de las API de terceros.
- El método WifiInfo.getMacAddress() y el método BluetoothAdapter.getDefaultAdapter().getAddress() devuelven 02:00:00:00:00:00 de forma predeterminada.
- Además, entre Android 6 y Android 9, se deben tener los siguientes permisos para acceder a las direcciones MAC de dispositivos externos cercanos que están disponibles a través de escaneos de Wi-Fi y Bluetooth:
- Permisos de propiedad/método requeridos: ACCESS_FINE_LOCATION o ACCESS_COARSE_LOCATION
Acercarse
Para obtener la información de conexión actual en Android seguiremos los siguientes pasos. Nota Kotlin
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo AndroidManifest.xml
Vaya al archivo AndroidManifest.xml y agregue estos usos y permisos: ACCESS_WIFI_STATE , ACCESS-FINE-LOCATION y ACCESS_COARSE_LOCATION .
<usos-permiso android:name=”android.permission.ACCESS_WIFI_STATE”/>
<usos-permiso android:name=”android.permission.ACCESS_FINE_LOCATION”/>
<usos-permiso android:name=”android.permission.ACCESS_COARSE_LOCATION”/>
A continuación se muestra el archivo AndroidManifest.xml completado.
XML
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.geeksforgeeks.connectioninfo"> <!--Add these permissions--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Paso 3: trabajar con el archivo activity_main.xml
Ahora vaya al archivo activity_main.xml que representa la interfaz de usuario de la aplicación y cree un TextView donde transmitiríamos la información del archivo MainActivity.kt . actividad_principal.xml
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--A TextView to display all the fetched information--> <TextView android:id="@+id/wifiInfo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
Paso 4: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. MainActivity.kt
Kotlin
import android.annotation.SuppressLint import android.content.Context import android.net.wifi.WifiManager import android.os.Bundle import android.text.format.Formatter import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { @SuppressLint("SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Invoking the Wifi Manager val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager // Method to get the current connection info val wInfo = wifiManager.connectionInfo // Extracting the information from the received connection info val ipAddress = Formatter.formatIpAddress(wInfo.ipAddress) val linkSpeed = wInfo.linkSpeed val networkID = wInfo.networkId val ssid = wInfo.ssid val hssid = wInfo.hiddenSSID val bssid = wInfo.bssid // Finding the textView from the layout file val wifiInformationTv = findViewById<TextView>(R.id.wifiInfo) // Setting the text inside the textView with // various entities of the connection wifiInformationTv.text = "IP Address:\t$ipAddress\n" + "Link Speed:\t$linkSpeed\n" + "Network ID:\t$networkID\n" + "SSID:\t$ssid\n" + "Hidden SSID:\t$hssid\n" + "BSSID:\t$bssid\n" } }
Salida: ejecutar en el emulador
Nota: El siguiente programa requiere que el dispositivo tenga una conexión activa. Por favor, conéctese a Wi-Fi . Si no lo hiciera, no obtendría nada.
Publicación traducida automáticamente
Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA