有时,找到与网络相关的细节(尤其是设备的IP地址)变得很有挑战性,通过调制解调器软件授予唯一的首选项可能需要这些信息。由于跨多个Android设备(三星,Mi,Lava)显示给用户的信息存在差异,因此我们实现了一个应用程序,通过该应用程序可以轻松获取有关当前网络的详细信息,并且可以在一个地方使用。我们从程序中的设备中提取的有关连接的信息或实体为:
- IP地址:这是一个数字标签,委派给连接到使用Internet协议进行通信的网络的每个已连接设备。
- 链接速度:这是设备可以在同一网络上与另一台设备进行通信的最大速度(以每秒比特数为单位)。
- 网络ID:这是IP地址中主机所在的部分。它标识TCP / IP网络
- SSID (服务集标识符):是由32个字符组成的唯一ID,用于无线网络命名。
- 隐藏的SSID:与SSID相同。隐藏SSID是保护网络安全的有效方法。当人们扫描附近的Wi-Fi连接时,这可以防止网络显示在可用Wi-Fi网络列表中。
- 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_LOCATION或ACCESS_COARSE_LOCATION
方法
要获取Android中的当前连接信息,我们将按照以下步骤操作。请注意,我们将使用Kotlin语言实施此项目。
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Kotlin作为编程语言。
步骤2:使用AndroidManifest.xml文件
转到AndroidManifest.xml文件并添加以下使用权限: ACCESS_WIFI_STATE , ACCESS-FINE-LOCATION和ACCESS_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"
}
}
输出:在模拟器上运行
Note: The following program requires the device to have an active connection. Kindly connect to Wi-Fi. Failing to do so would fetch nothing.