📌  相关文章
📜  如何在Android中以编程方式获取连接信息?

📅  最后修改于: 2021-05-10 16:32:56             🧑  作者: Mango

有时,找到与网络相关的细节(尤其是设备的IP地址)变得很有挑战性,通过调制解调器软件授予唯一的首选项可能需要这些信息。由于跨多个Android设备(三星,Mi,Lava)显示给用户的信息存在差异,因此我们实现了一个应用程序,通过该应用程序可以轻松获取有关当前网络的详细信息,并且可以在一个地方使用。我们从程序中的设备中提取的有关连接的信息或实体为:

  1. IP地址这是一个数字标签,委派给连接到使用Internet协议进行通信的网络的每个已连接设备。
  2. 链接速度:这是设备可以在同一网络上与另一台设备进行通信的最大速度(以每秒比特数为单位)。
  3. 网络ID:这是IP地址中主机所在的部分。它标识TCP / IP网络
  4. SSID (服务集标识符):是由32个字符组成的唯一ID,用于无线网络命名。
  5. 隐藏的SSID:与SSID相同。隐藏SSID是保护网络安全的有效方法。当人们扫描附近的Wi-Fi连接时,这可以防止网络显示在可用Wi-Fi网络列表中。
  6. BSSID: SSID将数据包保留在正确的WLAN中。即使存在重叠的WLAN,数据包也是安全的。但是,每个WLAN内都有多个接入点。基本服务集标识符(BSSID)标识那些访问点和关联的客户端,并包含在所有无线数据包中。

不幸的是,某些实体(例如MAC地址)无法正确获取,这是有真正原因的。

  • MAC地址是全局唯一的,这使得其他所有设备之间都具有唯一性。该标签不是用户可重置的,并且可以在恢复出厂设置后保存。因此,不希望唯一地标识用户。
  • Android 6.0(API 23)Android 9(API 28)开始,本地设备MAC地址(例如蓝牙和Wi-Fi)无法通过第三方API使用。
  • 默认情况下, WifiInfo.getMacAddress()方法和BluetoothAdapter.getDefaultAdapter()。getAddress()方法均返回02:00:00:00:00:00。
  • 此外,在Android 6和Android 9之间,必须持有以下权限才能访问附近的外部设备的MAC地址,这些地址可通过Bluetooth和Wi-Fi扫描获得:
  • 所需的方法/属性权限: ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION

方法

要获取Android中的当前连接信息,我们将按照以下步骤操作。请注意,我们将使用Kotlin语言实施此项目

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。

步骤2:使用AndroidManifest.xml文件

转到AndroidManifest.xml文件并添加以下使用权限: ACCESS_WIFI_STATEACCESS-FINE-LOCATIONACCESS_COARSE_LOCATION

以下是完成的AndroidManifest.xml文件。

XML


  
      
    
    
    
  
    
        
            
                
  
                
            
        
    
  


XML


  
    
    
  


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(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"
    }
}


步骤3:使用activity_main.xml文件

现在转到代表应用程序UI的activity_main.xml文件,并创建一个TextView,我们将在其中广播MainActivity.kt文件中的信息。以下是activity_main.xml文件的代码

XML格式



  
    
    
  

步骤4:使用MainActivity.kt文件

转到MainActivity.kt文件,并参考以下代码。下面是MainActivity.kt文件的代码。在代码内部添加了注释,以更详细地了解代码。

科特林

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(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"
    }
}

输出:在模拟器上运行

在仿真器上输出

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!