Я осуществляю службу отслеживания для отслеживания местоположения автобусов в моем городе. Автобусы оснащены WIFI access point (AP)
. Поэтому я буду определять номер маршрута на основе SSID AP WIFI после его разбора из текстового документа JSON. Я применил BroadcastReceiver для выполнения этой работы, но чтобы избежать случая, когда шина держится рядом с пользователем на мгновение, и пользователь не входит в шину (возможно, потому, что шина не является подходящей шиной, которую пользователь ждет) I хотите отправить маршрут на сервер через 60 секунд. Таким образом, приложение должно сначала захватить SSID, а затем проверить, находится ли он в диапазоне через 60 секунд, а затем в этом случае маршрут отправляется на сервер. Как я могу это сделать в моем случае?Подождите 60 секунд перед отправкой захваченного SSID на сервер
Я ценю любую помощь.
Часть документа JSON:
{
"wifi": [
{
"ssid": "Fr Privat",
"route_number": 1
},
{
"ssid": "Fr WLAN Hotspot+",
"route_number": 4
}
]
}
TrackingService класс:
public class TrackingService extends Service implements
LocationListener {
private int route_number = 0;
private final BroadcastReceiver wifi_receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifi.isWifiEnabled()) {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
final List<ScanResult> results = wifiManager.getScanResults();
if (results != null) {
// list of access points from the last scan
List<ScanResult> updatedResults = new ArrayList<ScanResult>();
// pick Wi-Fi access points which begins with these "Fr"
// characters.
for (int i = 0; i < results.size(); i++) {
String ssid = results.get(i).SSID;
if (ssid.startsWith("Fr")) {
updatedResults.add(results.get(i));
}
}
if (updatedResults.size() > 0 && route_number == 0) {
String ssid = deliverBestAccessPoint(updatedResults);
// retrieve data from json String and parse it.
route_number = parse_SSID(ssid);
}
}
} else {
Toast.makeText(context, "Please turn your Wi-Fi on",
Toast.LENGTH_SHORT).show();
}
}
private String deliverBestAccessPoint(final List<ScanResult> updatedResults) {
ScanResult bestSignal = (ScanResult) updatedResults.get(0);
for (int i = 1; i < updatedResults.size(); i++) {
ScanResult result = (ScanResult) updatedResults.get(i);
bestSignal = (WifiManager.compareSignalLevel(bestSignal.level,
result.level) < 0) ? result : bestSignal;
}
return bestSignal.SSID;
}
};
@Override
public void onLocationChanged(Location location) {
if (location != null) {
......
String jSONString = convertToJSON(mac, pLong, pLat, time, speed);
if (isNetworkAvailable()) {
PostData sender = new PostData(TrackingService.this);
sender.post_data(jSONString, this);
}
}
}
}