Search code examples
androidandroid-wifi

Unable to locate wifi networks in an android app


public class MainActivity extends AppCompatActivity {

WifiManager wifi;
WifiReceiver wifiReceiver;
StringBuilder sb = new StringBuilder();
TextView t ;
List<ScanResult> wifiList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    wifi.startScan();
    t=(TextView) findViewById(R.id.text);
  //  t.setText("Scanning....");
}


class WifiReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
            wifiList = wifi.getScanResults();
            sb.append("\nNumber Of Wifi connections :"+wifiList.size()+"\n\n");
            for(int i = 0; i < wifiList.size(); i++){

                sb.append(new Integer(i+1).toString() + ". ");
                sb.append((wifiList.get(i)).toString());
                sb.append("\n\n");
            }
         t.setText(sb);
    }
}
}

I want to display wifi networks in a list. I wrote this code but it nothing is being displayed on the screen. Can someone point out where I am going wrong.

Thanks!


Solution

  • You're missing one thing, you need to initialize the WifiReceiver reference:

    wifiReceiver = new WifiReceiver();
    

    I just tested it with this change, and it works for me.

    I used it in a Fragment:

    public class BlankFragment extends Fragment {
    
        private static final String ARG_PARAM1 = "param1";
        private static final String ARG_PARAM2 = "param2";
    
        private String mParam1;
        private String mParam2;
    
        WifiManager wifi;
        WifiReceiver wifiReceiver;
        StringBuilder sb = new StringBuilder();
        TextView t ;
        List<ScanResult> wifiList;
    
        public static BlankFragment newInstance(String param1) {
            BlankFragment fragment = new BlankFragment();
            Bundle args = new Bundle();
            args.putString(ARG_PARAM1, param1);
            fragment.setArguments(args);
            return fragment;
        }
    
        public BlankFragment() {
            // Required empty public constructor
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            if (getArguments() != null) {
                mParam1 = getArguments().getString(ARG_PARAM1);
    
            }
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
    
            wifiReceiver = new WifiReceiver(); //added
    
            wifi = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
            getActivity().registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            wifi.startScan();
            t=(TextView) rootView.findViewById(R.id.text);
            return rootView;
        }
    
        class WifiReceiver extends BroadcastReceiver {
    
            @Override
            public void onReceive(Context context, Intent intent) {
                wifiList = wifi.getScanResults();
                sb.append("\nNumber Of Wifi connections :"+wifiList.size()+"\n\n");
                for(int i = 0; i < wifiList.size(); i++){
    
                    sb.append(new Integer(i+1).toString() + ". ");
                    sb.append((wifiList.get(i)).toString());
                    sb.append("\n\n");
                }
                t.setText(sb);
            }
        }
    
    }
    

    Be sure to set the correct permissions as well:

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

    Result:

    enter image description here