Я разрабатываю приложение для определения местоположения в помещении для своего исследования.Я получаю подключенную службу сканирования Wi-Fi и приемник вещания от https://github.com/Talentica/WifiIndoorPositioning, чтобы получить результат сканирования Wi-Fi и использовать его для определения местоположения в помещении.Моя проблема в том, что результаты сканирования по Wi-Fi не со временем переходят с одного места на другое, похоже, результаты приватного сканирования не отображаются в новом списке.как я могу отредактировать его, чтобы получить актуальные обновленные результаты сканирования со временем
public class WifiService extends Service {
private final String TAG = "WifiService";
WifiConfiguration wifiConfiguration = new WifiConfiguration();
private WifiManager mWifiManager;
private ScheduledFuture<?> scheduleReaderHandle;
private ScheduledExecutorService mScheduler;
private WifiData mWifiData;
private long initialDelay = 0;
private long periodReader = AppContants.FETCH_INTERVAL;
List<ScanResult> mResults;
/**
* It creates a new Thread that it is executed periodically reading the last
* scanning of WiFi networks (if WiFi is available).
*/
@Override
public void onCreate() {
Log.d(TAG, "WifiService onCreate");
mWifiData = new WifiData();
mWifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
mScheduler = Executors.newScheduledThreadPool(1);
scheduleReaderHandle = mScheduler.scheduleAtFixedRate(new ScheduleReader(), initialDelay, periodReader,
TimeUnit.MILLISECONDS);
mResults = new ArrayList<ScanResult>() {};
}
/**
* Kills the periodical Thread before destroying the service
*/
@Override
public void onDestroy() {
// stop read thread
scheduleReaderHandle.cancel(true);
mScheduler.shutdown();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* Performs a periodical read of the WiFi scan result, then it creates a new
* {@link WifiData ()} object containing the list of networks and finally it
* sends it to the main activity for being displayed.
*/
class ScheduleReader implements Runnable {
@Override
public void run() {
if (mWifiManager.isWifiEnabled()) {
mResults = mWifiManager.getScanResults();
Log.d(TAG, "New scan result: (" + mResults.size() + ") networks found");
// store networks
mWifiData.addNetworks(mResults);
// send data to UI
Intent intent = new Intent(AppContants.INTENT_FILTER);
intent.putExtra(AppContants.WIFI_DATA, mWifiData);
LocalBroadcastManager.getInstance(WifiService.this).sendBroadcast(intent);
mResults.clear();
}
}
}
}
public class MainActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NumberFormat formatter = new DecimalFormat("#0.0000");
mWifiData = (WifiData) intent.getParcelableExtra(AppContants.WIFI_DATA);
if (mWifiData.getNetworks().size() != 0) {
List<WifiDataNetwork> latestScanList = mWifiData.getNetworks();
LocationWithNearbyPlaces loc = AlgorithmTxtDb.processingAlgorithms(fingerprintRefPointsList, routersList, latestScanList, 2);
}
}
public class MainActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NumberFormat formatter = new DecimalFormat("#0.0000");
mWifiData = (WifiData) intent.getParcelableExtra(AppContants.WIFI_DATA);
if (mWifiData.getNetworks().size() != 0) {
List<WifiDataNetwork> latestScanList = mWifiData.getNetworks();
LocationWithNearbyPlaces loc = AlgorithmTxtDb.processingAlgorithms(fingerprintRefPointsList, routersList, latestScanList, 2);
}
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWifiData = null;
// set receiver
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(AppContants.INTENT_FILTER));
// launch WiFi service
wifiServiceIntent = new Intent(this, WifiService.class);
startService(wifiServiceIntent);
// recover retained object
mWifiData = (WifiData) getLastNonConfigurationInstance();
}