【发布时间】:2018-09-28 09:50:14
【问题描述】:
我正在尝试做一件简单的事情但没有成功。我想获取 WiFi 扫描结果。
我阅读并尝试了这些链接,但没有任何好的结果:
How can I get Android Wifi Scan Results into a list?
这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWifiSpinner();
initWifi();
}
@Override
public void onResume() {
super.onResume();
getWifiPermissions();
}
@Override
protected void onPostResume() {
super.onPostResume();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case LOCAL_RC_WIFI_PERMISIONS:
handleWifiPermissions();
break;
}
}
/***************************************************************************************
*
* WIFI Handler
*
****************************************************************************************/
private void initWifi() {
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiScanReceiver = new WifiScanReceiver();
enableWifi();
getWifiPermissions();
}
private void enableWifi() {
if (false == wifiManager.isWifiEnabled()) {
Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
wifiManager.setWifiEnabled(true);
}
}
private void initWifiSpinner() {
Spinner wifiSpinner = (Spinner) findViewById(R.id.spinnerWifi);
wifiSpinner.setOnItemSelectedListener(new WifiSpinnerActivity());
wifiSpinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerListArray);
wifiSpinner.setAdapter(wifiSpinnerAdapter);
}
private void getWifiPermissions() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, LOCAL_RC_WIFI_PERMISIONS );
} else {
handleWifiPermissions();
}
}
private void handleWifiPermissions() {
registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
boolean startScan = wifiManager.startScan();
if (startScan) {
List<ScanResult> results = wifiManager.getScanResults();
Toast.makeText(getApplicationContext(), "SSID list size: " + results.size(), Toast.LENGTH_SHORT).show();
}
}
public class WifiScanReceiver extends BroadcastReceiver {
int local = 0;
@Override
public void onReceive(Context context, Intent intent) {
List<ScanResult> results = wifiManager.getScanResults();
int size = results.size();
Toast.makeText(getApplicationContext(), ++local + " Result list size: " + size, Toast.LENGTH_SHORT).show();
unregisterReceiver(this);
}
}
我有以下权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
我有两个问题:
List<ScanResult> results = wifiManager.getScanResults();的 results.size() 始终为 0。由于已知原因,
handleWifiPermissions一次又一次地调用。
【问题讨论】:
-
你的
AndroidManifest.xml有INTERNET权限吗? -
请检查您是否拥有
AndroidManifest.xml中包含的权限。权限是 -<uses-permission android:name="android.permission.INTERNET" />和<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -
是的,我有这些权限
标签: java android android-wifi wifimanager