android获取wifi别名,android-连接WIFI时获取SSID

android-连接WIFI时获取SSID

当我的android设备连接到WIFI时,我试图获取WIFI网络的SSID。

我已经注册了一个BroadcastReceiver,用于监听wifiInfo.getBSSID()。 WIFI断开或重新连接时,我会收到通知。 不幸的是,我无法获得网络的SSID。

我正在使用以下代码查找SSID:

WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

String ssid = wifiInfo.getSSID();

取回字符串2673771322295190190528,而不是SSID。

这些是清单中的权限(我添加了ACCESS_NETWORK_STATE只是为了检查,实际上我并不需要它)

为什么会这样? 如何获得实际的SSID? 建立连接之前,广播是否会提前播放? 还有我应该听的广播吗? 我只对WIFI连接感兴趣,对3G连接不感兴趣。

更新:我刚刚检查过,wifiInfo.getBSSID()返回null。

zmbq asked 2019-12-25T20:48:42Z

7个解决方案

89 votes

我在广播接收器中收听WifiManager.NETWORK_STATE_CHANGED_ACTION

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {

NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);

if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {

我检查了netInfo.isConnected()。 然后我就可以使用

WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);

WifiInfo info = wifiManager.getConnectionInfo ();

String ssid = info.getSSID();

更新

从android 8.0开始,除非打开GPS,否则我们将不会获得所连接网络的SSID。

Eric Woodruff answered 2019-12-25T20:49:13Z

46 votes

从Android 8.1(API 27)开始,必须为应用授予WifiManager.getConnectionInfo()(或WifiManager.getScanResults())权限,以便从WifiInfo.getSSID()或WifiInfo.getBSSID()获得结果。

要获得WifiManager.getConnectionInfo()和WifiManager.getScanResults()和WifiManager.getScanResults()的结果,还需要获得此许可,尽管尚不清楚这是8.1中的新增功能还是以前的要求。

来源:“ BSSID / SSID可用于推断位置,因此要求相同访问这些WifiInfo字段的位置权限使用WifiManager.getConnectionInfo()请求WifiManager.getScanResults()。”

mike47 answered 2019-12-25T20:49:43Z

30 votes

如果您不想制作广播接收器,请简单尝试

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo;

wifiInfo = wifiManager.getConnectionInfo();

if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {

ssid = wifiInfo.getSSID();

}

记住每次用户断开连接或连接到新的SSID或任何wifi状态更改时,都需要初始化WifiInfo,即wifiInfo = wifiManager.getConnectionInfo();

Pranav answered 2019-12-25T20:50:07Z

13 votes

我找到了一个有趣的解决方案来获取当前连接的Wifi AP的SSID。您只需要使用迭代NetworkInfo.getState并找到具有特定NetworkInfo.State.CONNECTED的配置

我的例子

在广播接收器中,动作为NetworkInfo.getState我正在从意图中获取当前的连接状态

NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

nwInfo.getState()

如果NetworkInfo.getState等于NetworkInfo.State.CONNECTED,那么我可以获得当前的WifiInfo对象

WifiManager wifiManager = (WifiManager) getSystemService (Context.WIFI_SERVICE);

WifiInfo info = wifiManager.getConnectionInfo ();

在那之后

public String findSSIDForWifiInfo(WifiManager manager, WifiInfo wifiInfo) {

List listOfConfigurations = manager.getConfiguredNetworks();

for (int index = 0; index < listOfConfigurations.size(); index++) {

WifiConfiguration configuration = listOfConfigurations.get(index);

if (configuration.networkId == wifiInfo.getNetworkId()) {

return configuration.SSID;

}

}

return null;

}

而且非常重要的一点是,此方法不需要“位置”即可权限

TomMannson answered 2019-12-25T20:50:50Z

5 votes

在Android 8.1中,必须打开“位置”以获取SSID,否则无法获取连接状态,但无法获取SSID

WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = null;

if (wifiManager != null)

wifiInfo = wifiManager.getConnectionInfo();

String ssid = null;

if (wifiInfo != null)

ssid = wifiInfo.getSSID(); /*you will get SSID if location turned off*/

user3143487 answered 2019-12-25T20:51:10Z

3 votes

这是@EricWoodruff给出的答案的后续措施。

您可以使用Context的getExtraInfo()来获取WiFi SSID。

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals (action)) {

NetworkInfo netInfo = intent.getParcelableExtra (WifiManager.EXTRA_NETWORK_INFO);

if (ConnectivityManager.TYPE_WIFI == netInfo.getType ()) {

String ssid = info.getExtraInfo()

Log.d(TAG, "WiFi SSID: " + ssid)

}

}

如果您未使用BroadcastReceiver,请检查此答案以使用Context获得SSID

这已在Android Oreo 8.1.0上进行了测试

Yaswant Narayan answered 2019-12-25T20:51:43Z

-2 votes

显示空值的Android 9 SSID使用此代码。

ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (networkInfo.isConnected()) {

WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

wifiInfo.getSSID();

String name = networkInfo.getExtraInfo();

String ssid = wifiInfo.getSSID();

return ssid.replaceAll("^\"|\"$", "");

}

Udhaya Sweetidiot answered 2019-12-25T20:52:03Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值