android – 如何获取所有连接网络的BSSID?

我使用下面的代码,但它运作良好,但在一个月后,我得到一个结果,而不是获得BSSID值.这是我的代码.请指导我任何其他替代方式.
@SuppressLint("LongLogTag")
public void loadWifiAvailableList() {
    WifiManager wifiMan = (WifiManager) getApplicationContext().getSystemService(
            Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiMan.getConnectionInfo();

    String macAddr = wifiInfo.getMacAddress();
    String bssid = wifiInfo.getBSSID();
   //here i am getting the proper bssid
    Log.d("bssid from get connection info",bssid);

    List<WifiConfiguration> list = wifiMan.getConfigurednetworks();
    for( WifiConfiguration i : list ) {
        if(i.BSSID!=null)
     //here i am getting any from i.BSSID
        Log.d("bssid from get configured network",i.BSSID);

    }
}

解决方法

我也遇到了同样的问题.我在广播接收器的帮助下解决了它并围绕它构建了我自己的逻辑.

广播接收器类,确保在清单中提供权限ACCESS_WIFI_STATE和CHANGE_WIFI_STATE.

public class WifiChecker extends broadcastReceiver {

    private OnWifiResultArrived onWifiResultArrived = null;
    private static boolean CAN_CALL_AGAIN = true;
    private WifiManager wifiManager;

    /**
     * @param context context of activity.
     * Remember to provide permission
     * <p>
     * {@code <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />},* {@code <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />}</p>
     */
    @SuppressLint("MissingPermission")
    public WifiChecker(Context context) {
        CAN_CALL_AGAIN = true;
        wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifiManager.startScan();

        rerunAgain();
    }

    private void rerunAgain() {
        new Handler().postDelayed(new Runnable() {
            @SuppressLint("MissingPermission")
            @Override
            public void run() {
                if (CAN_CALL_AGAIN)
                    wifiManager.startScan();

                rerunAgain();       //rerun the broadcast again
            }
        },1000);
    }

    public void addListerForWifiCallback(OnWifiResultArrived onWifiResultArrived) {
        this.onWifiResultArrived = onWifiResultArrived;
    }


    @SuppressLint("MissingPermission")
    @Override
    public void onReceive(Context context,Intent intent) {
        updateUi(wifiManager.getScanResults());
    }

    private void updateUi(final List<ScanResult> scanResults) {

        try {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (onWifiResultArrived != null)

                            onWifiResultArrived.isInWifiRange(scanResults);
                    } catch (Exception e) {
                        e.printstacktrace();
                    }

                }
            },1000);
        } catch (Exception e) {
            e.printstacktrace();
        }
    }

    public void unregisterListner(Context context) {
        this.onWifiResultArrived = null;
        CAN_CALL_AGAIN = false;
    }

    public interface OnWifiResultArrived {
        void isInWifiRange(List<ScanResult> scanResults);
    }
}

广播课的用户
实现广播接收器类接口,即OnWifiResultArrived

WifiChecker checker = new WifiChecker(this);
checker.addListerForWifiCallback(this);

@Override
public void isInWifiRange(List<ScanResult> scanResults){
    //get your BSSID here
    scanResults.get(position).BSSID;
    //write your logic for checking weather it is connected or not
}

要么

WifiChecker checker = new WifiChecker(this);
checker.addListerForWifiCallback(@Override
public void isInWifiRange(List<ScanResult> scanResults){
    //get your BSSID here
    scanResults.get(position).BSSID;
   //write your logic for checking weather it is connected or not
});

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...