Android-приложение для сканирования точек доступа Wi-Fi и отображения их в виде списка

Я пытаюсь создать простое приложение для Android, которое сканирует точки доступа Wi-Fi и отображает их, включая SSID, BSSID и уровень сигнала в виде списка.

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

Я написал коды для выполнения этих основных задач. Но почему-то он не показывает никакого результата. Он также не показывает никаких ошибок. Не могли бы вы помочь мне исправить это и заставить его работать?

public class MainActivity extends AppCompatActivity implements View.OnClickListener, CompoundButton.OnCheckedChangeListener{

// Declare View variables
private Button mRefreshButton;
private Switch mWifiSwitch;
private ListView mAPListView;
private List<ScanResult> mWifiList;
private List<String> mListOfProviders;
private ListAdapter mAdapter;
private WifiManager mWifiManager;


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

    mListOfProviders = new ArrayList<String>();
    mAPListView = (ListView) findViewById(R.id.APListView);
    mRefreshButton = (Button) findViewById(R.id.refreshButton);
    mWifiSwitch = (Switch) findViewById(R.id.WiFiSwitch);
    mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    boolean wasEnabled = mWifiManager.isWifiEnabled();
    if (wasEnabled){
        mWifiSwitch.setChecked(true);
    }
    mWifiSwitch.setOnCheckedChangeListener(this);

    mWifiManager.startScan();
    mWifiList = mWifiManager.getScanResults();

    for (ScanResult result : mWifiList) {
        mListOfProviders.add(result.SSID); //This will add the SSID of the connection
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mListOfProviders);
    mAPListView.setAdapter(adapter);

}


@Override
public void onClick(View view)
{

}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked){
        mWifiManager.setWifiEnabled(true);
    }
    else {
        mWifiManager.setWifiEnabled(false);
    }
}
}

person Jaeyong    schedule 22.06.2016    source источник


Ответы (1)


Попробуйте добавить разрешения в манифест.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
person ekilic    schedule 23.06.2016
comment
Я уже сделал. Вы видите что-то не так, кроме проблемы с разрешением. Понятия не имею.. Спасибо за помощь! - person Jaeyong; 23.06.2016
comment
Может быть, вы можете удалить startScan(). Я могу получить scanResults без startScan. Или вы можете добавить задержку после вызова startScan(). - person ekilic; 23.06.2016
comment
На самом деле это была проблема разрешения. В настоящее время я использую версию Marsh mellow. Я понял, что возникла проблема, связанная с разрешением, при получении результатов сигнала Wi-Fi. Начиная с этой версии, требуется не только разрешение Wi-Fi, но и разрешение на определение местоположения. Спасибо за помощь! - person Jaeyong; 23.06.2016