Android 获取本机的mac和wifi的BSSID(mac)以及其他信息

2024-06-01 15:32

本文主要是介绍Android 获取本机的mac和wifi的BSSID(mac)以及其他信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

注:2013年写的,仅供参考

为了增强用户隐私,Android 9 引入了若干行为变更,如限制后台应用访问设备传感器、限制通过 Wi-Fi 扫描检索到的信息,以及与通话、手机状态和 Wi-Fi 扫描相关的新权限规则和权限组。


一上班就开始总结上礼拜写的wifi,先来说说wifi的属性


在Android的官方文档中定义了如下五种状态:

WIFI_STATE_DISABLED   WIFI 不可用 

WIFI_STATE_DISABLING  WIFI 正在关闭 

WIFI_STATE_ENABLED     WIFI 可用 

WIFI_STATE_ENABLING    WIFI 正在打开 

WIFI_STATE_UNKNOWN    WIFI 状态不可知

以下是WifiManager类的函数:

        要操作WIFI设备,就需要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理我们的WIFI设备。

addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。

calculateSignalLevel(int rssi , int numLevels) 计算信号的等级

compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度

createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接

disableNetwork(int netId) 让一个网络连接失效

disconnect() 断开当前的WIFI连接

enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用

getConfiguredNetworks() 获取网络连接的状态

getConnectionInfo() 获取当前连接的信息

getDhcpInfo() 获取DHCP 的信息

getScanResulats() 获取扫描测试的结果

getWifiState() 获取当前WIFI设备的状态

isWifiEnabled() 判断WIFI设备是否打开

pingSupplicant() ping操作,和PC的ping操作相同作用

ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的

reconnect() 重新连接一个未连接上的WIFI网络

removeNetwork() 移除某一个网络

saveConfiguration() 保留一个配置信息

setWifiEnabled() 让一个连接有效

startScan() 开始扫描

updateNetwork(WifiConfiguration config) 更新一个网络连接

获取周围的wifi热点列表

       想得到周围的WIFI热点列表,可以使用WifiManager.getScanResults()返回一个ScanResult列表,ScanResult对象中,包含了以下几个属性:

BSSID 接入点的地址

SSID 网络的名字,唯一区别WIFI网络的名字

Capabilities 网络接入的性质

Frequency 当前WIFI设备附近热点的频率(MHz)

Level 所发现的WIFI网络信号强度

查看自己已连接上的wifi信息

        WifiInfo这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。

getBSSID()  获取BSSID属性 也就是路由器的mac

getDetailedStateOf()  获取客户端的连通性

getHiddenSSID()  获取SSID 是否被隐藏

getIpAddress()  获取IP 地址

getLinkSpeed()  获取连接的速度

getMacAddress()  获取Mac 地址

getRssi()  获取802.11n 网络的信号

getSSID()  获取SSID 也就是wifi名称

getSupplicanState()  获取具体客户端状态的信息

 

呈上代码:

AndroidManifest.xml 注意权限

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.gsmcelllocation"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="9"android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //注意权限
<uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity android:name="com.example.gsmcelllocation.WifiMac" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
//注意权限
<uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity android:name="com.example.gsmcelllocation.WifiMac" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

 

wifimac.xml

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/info"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView" /><ScrollViewandroid:id="@+id/scrollView1"android:layout_width="match_parent"android:layout_height="wrap_content" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="周围wifi热点列表" /><TextViewandroid:id="@+id/wifi"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="。。。" /></LinearLayout></ScrollView></LinearLayout>


WifiMac.xml

 

 

package com.feiyue.wifi;import java.util.List;import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;public class WifiMac extends Activity
{private WifiManager wifi;TextView wifiText;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.wifimac);TextView infoText = (TextView) this.findViewById(R.id.info);wifiText = (TextView) this.findViewById(R.id.wifi);infoText.setText(getInfo());Thread t = new Thread(new Runnable() {public void run() {while(true){runOnUiThread(new Runnable() {public void run(){obtainWifiInfo();    }});try{Thread.sleep(500);}catch(InterruptedException e){e.printStackTrace();}}        }});t.start();}private String getInfo(){wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();String maxText = info.getMacAddress();String ipText = intToIp(info.getIpAddress());String status = "";if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED){status = "WIFI_STATE_ENABLED";}String ssid = info.getSSID();int networkID = info.getNetworkId();int speed = info.getLinkSpeed();String bssid = info.getBSSID();return "mac:" + maxText + "\n\r"+ "ip:" + ipText + "\n\r"+ "wifi status :" + status + "\n\r"+ "ssid :" + ssid + "\n\r"+ "net work id :" + networkID + "\n\r"+ "connection speed:" + speed + "\n\r"+ "BSSID:" + bssid + "\n\r";}private String intToIp(int ip){return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "."+ ((ip >> 24) & 0xFF);}private void obtainWifiInfo() {// 显示扫描到的所有wifi信息:wifi= (WifiManager) getSystemService(WIFI_SERVICE);  if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED){StringBuilder scanBuilder= new StringBuilder();    List<ScanResult> scanResults=wifi.getScanResults();//搜索到的设备列表  for (ScanResult scanResult : scanResults) {scanBuilder.append("\n设备名:"+scanResult.SSID+"\n信号强度:"+wifi.calculateSignalLevel(scanResult.level,1001)+"\nBSSID:" + scanResult.BSSID);}wifiText.setText(scanBuilder);}}
}

 

 

 

 

 

 

这篇关于Android 获取本机的mac和wifi的BSSID(mac)以及其他信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021393

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新