2015-08-26 19 views
0

我正在实施跟踪服务以跟踪我所在城市的巴士位置。巴士配有WIFI access point (AP)。所以我会从JSON文本文件中解析出来后,根据WIFI AP的SSID检测路由号码。我已经实现了一个BroadcastReceiver来完成这项工作,但为了避免公交车暂时靠近用户并且用户没有进入公交车(可能是因为公交车不是用户正在等待的公交车)希望在60秒后将路由发送到服务器。因此,应用程序必须首次捕获SSID,然后在60秒后检查它是否仍在范围内,然后在此情况下将路由发送到服务器。我的情况怎么办?在将捕获的SSID发送到服务器之前等待60秒

我很感激任何帮助。在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); 

      } 

    } 
} 


    } 

回答

0

可以使用Handler类延迟SSID 60秒被发送到服务器。

每次获得SSID时,都会调用postDelayed()函数,并使用您的自定义Runnable和延迟60秒。

在Runnable内部,您可以检查SSID是否在范围内,如果在范围内,则将SSID发送到服务器。

希望这会有帮助

相关问题