【问题标题】:ANDROID:- not able to get the available wifi list using ScanResultANDROID:- 无法使用 ScanResult 获取可用的 wifi 列表
【发布时间】:2017-06-08 04:16:13
【问题描述】:

我正在尝试通过 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);

        }
    }
}

【问题讨论】:

  • 您是否添加了适当的权限。通过这个stackoverflow.com/questions/5452940/…
  • hii @vikrant 你找到解决方案了吗?
  • 我已经添加了权限顺便说一句谢谢你的建议..@VindhyaPratapSingh
  • 是的@RuchaBhatt

标签: android broadcastreceiver android-wifi wifimanager


【解决方案1】:

试试这个代码

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);
                    }
                }
            }
        };
    }

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"/>

【讨论】:

    【解决方案2】:
        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" />
    

    编辑:

    【讨论】:

    • 它仍然显示“wifi连接数:0”......它无法扫描可用的wifi
    • 编辑:如屏幕显示所示
    • 谢谢...@Kerim FIRAT...它可以工作...但是如果我包含 startScan() 然后应用程序停止..如果我删除 startScan() 应用程序正常工作
    【解决方案3】:

    试试这个代码:

    清单权限:

    android:name="android.permission.ACCESS_WIFI_STATE" android:name="android.permission.CHANGE_WIFI_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 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多