ANDROID:-无法使用ScanResult获取可用wifi列表

ANDROID:-无法使用ScanResult获取可用wifi列表,android,broadcastreceiver,android-wifi,wifimanager,Android,Broadcastreceiver,Android Wifi,Wifimanager,我正在尝试按ScanResult列出可用的wifi网络 有人能告诉我我的代码出了什么问题吗?我没有得到想要的输出 这是我的密码: public class Activity_scanwifi extends AppCompatActivity { Switch aSwitch; TextView textView; WifiManager wifiManager; WifiInfo wifiInfo; String info; @Override

我正在尝试按ScanResult列出可用的wifi网络

有人能告诉我我的代码出了什么问题吗?我没有得到想要的输出

这是我的密码:

public class Activity_scanwifi extends AppCompatActivity {

    Switch aSwitch;
    TextView textView;
    WifiManager wifiManager;
    WifiInfo wifiInfo;
    String info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scanwifi);

        aSwitch=(Switch) findViewById(R.id.s);
        textView=(TextView) findViewById(R.id.textView);
        wifiManager=(WifiManager) getSystemService(Context.WIFI_SERVICE);
        wifiManager.startScan();

        aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // switch on
                if(isChecked && ! wifiManager.isWifiEnabled())
                {
                    wifiManager.setWifiEnabled(true);
                    wifiInfo=wifiManager.getConnectionInfo();
                }
                // switch off
                if (!isChecked && wifiManager.isWifiEnabled())
                {
                  wifiManager.setWifiEnabled(false);
                }
            }
        });
        broadcast b=new broadcast();
        registerReceiver(b,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    }

    public class broadcast extends BroadcastReceiver{
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onReceive(Context context, Intent intent) {
            // onReceive method updates any change in the available wifi
            StringBuffer stringBuffer=new StringBuffer();
           /// List<WifiConfiguration> list=wifiManager.getConfiguredNetworks();
            List<ScanResult> list=wifiManager.getScanResults();
            //for(WifiConfiguration wifiConfiguration : list)
            for(ScanResult scanResult : list)
            {
                stringBuffer.append(scanResult);
            }

            textView.setText(stringBuffer);

        }
    }
}
公共课堂活动\u scanwifi扩展应用程序活动{
开关;
文本视图文本视图;
WifiManager WifiManager;
WifiInfo WifiInfo;
字符串信息;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.scanwifi);
aSwitch=(开关)findViewById(R.id.s);
textView=(textView)findViewById(R.id.textView);
wifiManager=(wifiManager)getSystemService(Context.WIFI_服务);
wifiManager.startScan();
setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
//打开
如果(isChecked&!wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(true);
wifiInfo=wifiManager.getConnectionInfo();
}
//关掉
如果(!isChecked&&wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(false);
}
}
});
广播b=新广播();
registerReceiver(b,新的意向过滤器(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
}
公共类广播扩展广播接收机{
@RequiresApi(api=Build.VERSION\u code.LOLLIPOP)
@凌驾
公共void onReceive(上下文、意图){
//onReceive方法更新可用wifi中的任何更改
StringBuffer StringBuffer=新的StringBuffer();
///List List=wifiManager.getConfiguredNetworks();
List List=wifiManager.getScanResults();
//用于(WifiConfiguration WifiConfiguration:list)
用于(扫描结果扫描结果:列表)
{
追加(扫描结果);
}
setText(stringBuffer);
}
}
}

试试这个代码

WifiList.java

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife; 


public class WifiList extends Activity {

            WifiManager mWifiManager;
            ArrayList<String> mWifiList;

            @BindView(R.id.lst_wifilist)
            ListView lst_wifilist;

            @BindView(R.id.ll_scan)
            LinearLayout ll_scan;

            @Override
            protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_wifilist);
                ButterKnife.bind(this);
                mWifiList = new ArrayList<>();
                mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                mWifiList.clear();

                scanNetwork();
    }

    private void scanNetwork() {
            registerReceiver(mWifiScanReceiver,
                    new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            mWifiManager.startScan();
        }

        private final BroadcastReceiver mWifiScanReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent intent) {
                if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
                    List<ScanResult> mScanResults = mWifiManager.getScanResults();
                    // add your logic here
                    mWifiList.clear();
                    for (int i = 0; i < mScanResults.size(); i++) {
                        Log.e("Scanned Wifi Name :- ", mScanResults.get(i).SSID);
                        mWifiList.add(mScanResults.get(i).SSID);

                        WifiListAdapter adapter = new WifiListAdapter(WifiList.this, mWifiList);
                        lst_wifilist.setAdapter(adapter);
                    }
                }
            }
        };
    }
导入android.app.Activity;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.net.wifi.ScanResult;
导入android.net.wifi.WifiConfiguration;
导入android.net.wifi.WifiManager;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.LinearLayout;
导入android.widget.ListView;
导入java.util.ArrayList;
导入java.util.List;
导入butterknife.BindView;
进口毛刀,毛刀;
公共类WifiList扩展活动{
WifiManager-mWifiManager;
阵列列表;
@BindView(R.id.lst_wifilist)
ListView lst_wifilist;
@BindView(R.id.ll\U扫描)
线性布局ll_扫描;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifilist);
把(这个)绑起来;
mWifiList=newarraylist();
mWifiManager=(WifiManager)getApplicationContext().getSystemService(Context.WIFI_服务);
mWifiList.clear();
扫描网络();
}
专用网络(){
寄存器接收器(mWifiScanReceiver,
新的IntentFilter(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
mWifiManager.startScan();
}
private final BroadcastReceiver mWifiScanReceiver=新的BroadcastReceiver(){
@凌驾
接收时公共无效(上下文c,意图){
if(intent.getAction().equals(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION)){
List mScanResults=mWifiManager.getScanResults();
//在这里添加您的逻辑
mWifiList.clear();
对于(int i=0;i
AndroidMenifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

尝试以下代码:

清单权限:

android:name=“android.permission.ACCESS\u WIFI\u STATE” android:name=“android.permission.CHANGE\u WIFI\u STATE”

活动

public class MainActivity extends Activity implements OnClickListener {

    Button setWifi;
    ListView listViwProvider;

    WifiManager wifiManager;
    WifiReceiver receiverWifi;
    List<ScanResult> wifiList;
    List<String> listOfProvider;
    ListAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listOfProvider = new ArrayList<String>();
        listViwProvider = (ListView) findViewById(R.id.list_view_wifi);
        setWifi = (Button) findViewById(R.id.btn_wifi);

        setWifi.setOnClickListener(this);
        wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

        if (wifiManager.isWifiEnabled() == true) {
            setWifi.setText("ON");
            scaning();
        }else {
            wifiManager.setWifiEnabled(true);
            setWifi.setText("ON");
            scaning();
        }

        listViwProvider.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                    ImportDialog action = new ImportDialog(MainActivity.this, (wifiList.get(position)).toString());
                    action.showDialog();
            }
        });
    }

    private void scaning() {
        receiverWifi = new WifiReceiver();
        registerReceiver(receiverWifi, new IntentFilter(
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifiManager.startScan();

    }

    @Override
    public void onClick(View arg0) {
        if (wifiManager.isWifiEnabled() == true) {
            wifiManager.setWifiEnabled(false);
            setWifi.setText("OFF");
            listViwProvider.setVisibility(ListView.GONE);
        } 
        else if (wifiManager.isWifiEnabled() == false) {
            wifiManager.setWifiEnabled(true);
            setWifi.setText("ON");
            listViwProvider.setVisibility(ListView.VISIBLE);
            scaning();
        }
    }

    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiverWifi);
    }

    protected void onResume() {
        registerReceiver(receiverWifi, new IntentFilter(
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        super.onResume();
    }

    class WifiReceiver extends BroadcastReceiver {

        public void onReceive(Context c, Intent intent) {
            wifiList = wifiManager.getScanResults();
            Collections.sort(wifiList, new Comparator<ScanResult>() {
                @Override
                public int compare(ScanResult lhs, ScanResult rhs) {
                    return (lhs.level > rhs.level ? -1
                            : (lhs.level == rhs.level ? 0 : 1));
                }
            });
            listOfProvider.clear();
            String providerName;
            for (int i = 0; i < wifiList.size(); i++) {
                providerName = (wifiList.get(i).SSID).toString()
                        +"\n"+(wifiList.get(i).BSSID).toString();
                listOfProvider.add(providerName);
            }
            adapter = new ListAdapter(MainActivity.this, listOfProvider);
            listViwProvider.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    }
}
public类MainActivity扩展活动实现OnClickListener{
按钮设置WiFi;
ListView listViwProvider;
WifiManager WifiManager;
无线接收器接收器;
列表wifiList;
供应商列表;
列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listOfProvider=newArrayList();
listViwProvider=(ListView)findViewById(R.id.list\u view\u wifi);
setWifi=(按钮)findViewById(R.id.btn_wifi);
setWifi.setOnClickListener(这个);
wifiManager=(wifiManager)this.getSystemService(Context.WIFI_服务);
if(wifiManager.isWifiEnabled()==true){
setWifi.setText(“打开”);
扫描();
}否则{
wifiManager.setWifiEnabled(true);
setWifi.setText(“打开”);
扫描();
}
列表
public class ListAdapter extends ArrayAdapter<String> {
    Activity mActivity;
    List<String> wifiName;
    private LayoutInflater inflater;

    public ListAdapter(Activity a, List<String> wifiName) {
        super(a, R.layout.single_list, wifiName);
        mActivity = a;
        inflater = LayoutInflater.from(mActivity);
        this.wifiName = wifiName;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = inflater.inflate(R.layout.single_list, parent, false);
        TextView wifiProvider = (TextView) convertView
                .findViewById(R.id.txt_wifi_provider);
        wifiProvider.setText(wifiName.get(position));
        return convertView;
    }

}
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.content.ServiceConnection;
    import android.net.Uri;
    import android.net.wifi.ScanResult;
    import android.net.wifi.WifiManager;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.util.List;

    public class MainActivity extends Activity {
    private StringBuilder sb = new StringBuilder();
    List<ScanResult> scanList;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      textView = (TextView)findViewById(R.id.textView);
      getWifiNetworksList();
    }

    private void getWifiNetworksList(){
        IntentFilter filter = new IntentFilter();
        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        final WifiManager wifiManager =
                   (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        wifiManager.startScan();
    registerReceiver(new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        sb = new StringBuilder();
        scanList = wifiManager.getScanResults();
        sb.append("\n  Number Of Wifi connections :" + " "    +scanList.size()+"\n\n");
        for(int i = 0; i < scanList.size(); i++){
        sb.append(new Integer(i+1).toString() + ". ");
        sb.append((scanList.get(i)).toString());
        sb.append("\n\n");
    }
      Toast.makeText(getApplicationContext(),""+sb.toString(),Toast.LENGTH_LONG).show();
       textView.setText(sb);
       }
      },filter);
     }
    }

Manifest:

        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />