首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >onAvailable方法在ConnectivityManager.NetworkCallback中的应用

onAvailable方法在ConnectivityManager.NetworkCallback中的应用
EN

Stack Overflow用户
提问于 2019-12-19 06:12:41
回答 1查看 513关注 0票数 1

我尝试使用ConnectivityManager.NetworkCallback,如下所示。我不需要使用Broadcastreceivers,只需要使用ConnectivityManager.NetworkCallback。但我想拿连接的wifi SSID,我做了如下。

代码语言:javascript
运行
复制
package com.example.myapplication;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkRequest;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    ConnectivityManager connectivityManager;
    ConnectivityManager.NetworkCallback networkCallback;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkRequest networkRequest = new NetworkRequest.Builder().build();

        networkCallback = new ConnectivityManager.NetworkCallback(){
            @Override
            public void onAvailable(Network network) {
                Toast.makeText(getApplicationContext(), "*******onAvailable**********", Toast.LENGTH_LONG).show();
                WifiManager wifiManager;
                String connectedSsid = null;
                wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                WifiInfo info = wifiManager.getConnectionInfo();
                connectedSsid = info.getSSID();
                if (connectedSsid != null) {
                    Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
                }

            }
        };
        connectivityManager.registerNetworkCallback(networkRequest,networkCallback);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onStop(){
        super.onStop();
        connectivityManager.unregisterNetworkCallback(networkCallback);
    }
}

我在AndroidManifest.xml中添加了以下权限

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  • I将其注册为在onStop方法中的onCreate
  • connectivityManager.unregisterNetworkCallback(networkCallback);中的connectivityManager.registerNetworkCallback(networkRequest,networkCallback);。-I使用@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)。但是,我想为Android 9激活这个任务(这对它兼容吗?)

因此,在onAvailable方法中,我这样做了(您可以在上面看到我的完整代码)。

代码语言:javascript
运行
复制
WifiManager wifiManager;
String connectedSsid = null;
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
connectedSsid = info.getSSID();
if (connectedSsid != null) {
    Toast.makeText(getApplicationContext(), "*******" + connectedSsid + "**********", Toast.LENGTH_LONG).show();
}

那么,我如何使用仅使用ConnectivityManager.NetworkCallback的连接wifi SSID

EN

Stack Overflow用户

发布于 2019-12-19 06:29:35

您只需要检查WifiManager.getConfiguredNetworks()并使用WifiInfo.getNetworkId()查找具有特定网络id的配置。

例如,

在具有动作的广播接收器中,WifiManager.NETWORK_STATE_CHANGED_ACTION -从意图中检索当前连接状态

intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

NetworkInfo nwInfo =

nwInfo.getState()

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

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

WifiInfo info = wifiManager.getConnectionInfo();

然后,

代码语言:javascript
运行
复制
public String findSSIDForWifiInfo(WifiManager manager, WifiInfo wifiInfo) {

    List<WifiConfiguration> 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;
}

注意:此方法不需要位置或位置权限。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59404134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档