Android Studio WifiManager

Я хочу найти доступные сети Wi-Fi и показать их в списке, когда я нажимаю кнопку «Пуск» в своем приложении, но мой код никогда не находит сеть Wi-Fi. Я пытался показать количество доступных сетей с помощью TextView или Toast, но всегда отображается 0.

Вот мой код:

public class MainActivity extends AppCompatActivity {

    //Listview
    private ArrayAdapter<String> adapter;
    private ListView list;
    private ArrayList<String> mylist = new ArrayList<String>();
    ListAdapter adapter1;
    TextView tV;

    //Wifi
    private WifiManager mywifi;
    WifiReceiver myreceiver;
    List<ScanResult> wifiList;
    StringBuilder sb;

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

        //definieren
        Button start = (Button) findViewById(R.id.btnstart);

        //Listview
        list = (ListView) findViewById(R.id.lV);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mylist);
        list.setAdapter(adapter);

        //Textview
        tV = (TextView) findViewById(R.id.tV);
        tV.setText("");

        //Wifi
        mywifi = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (mywifi.isWifiEnabled() == false) {
            Toast.makeText(getApplicationContext(), "Wifi is disabled ....making it enabled", Toast.LENGTH_SHORT).show();
            mywifi.setWifiEnabled(true);
        }
        myreceiver = new WifiReceiver();
        registerReceiver(myreceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        mywifi.startScan();

        //buttenevents
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //getWifiNetworksList();
            }
        });

    }

    public void getWifiNetworksList() {
        tV.setText("Wifi is starting");
        tV.setText(myreceiver.Wifilist());

    }

    class WifiReceiver extends BroadcastReceiver {

        public String txt;

        // This method call when number of wifi connections changed
        public void onReceive(Context c, Intent intent) {

            sb = new StringBuilder();
            wifiList = mywifi.getScanResults();
            sb.append("\n        Number 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");
            }

            tV.setText(sb);//tV...TextView
            Toast.makeText(getApplicationContext(), "reciever finished", Toast.LENGTH_SHORT).show();
        }

        public String Wifilist() {
            return txt;
        }

    }
}

person ogris    schedule 01.07.2016    source источник
comment
см. эту ссылку, чтобы создать свой широковещательный приемник, и этот для отображения результатов в виде списка   -  person Rahmat Waisi    schedule 01.07.2016
comment
я пробовал обе ссылки. Но я все еще получаю тот же ответ.   -  person ogris    schedule 02.07.2016


Ответы (1)


Включить разрешение местоположения.

Код работает абсолютно нормально. Протестировано на Nexus 5. Я только что добавил следующие разрешения в файл манифеста.

<uses-permission android:name="android.permission.ACCESS_WIFI_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" />

Если он все еще не показывает никакого результата. Просто убедитесь, что ваш пользователь разрешил вашему приложению разрешение на определение местоположения.
Это можно сделать двумя способами.

Вручную

Перейдите в настройки своего телефона и нажмите Включить для приложения. (В моем случае мое приложение называется WifiSolution).

введите здесь описание изображения

Программно

Вы также можете использовать разрешение среды выполнения Android, чтобы сделать это программно.

person Rohit Singh    schedule 10.03.2020