¿Cómo obtener la información de conexión mediante programación en Android?

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:

  1. 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.
  2. 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.
  3. ID de red: es la parte de una dirección IP en la que reside un host. Identifica la red TCP/IP
  4. SSID (Identificador de conjunto de servicios): es una identificación única que consta de 32 caracteres que se utilizan para nombrar redes inalámbricas.
  5. 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.
  6. 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.

Output on the Emulator

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *