2012-04-22 70 views
0

您好我想在Android設備實現GPS設備通信功能,但我不知道這些設備如何與使用這些設備數據的服務器進行通信並將這些數據保存在server.I不得不質疑這些設備
1- Can服務器連接這些設備並獲取數據並將數據保存在服務器上?或者這些設備連接到服務器並將數據發送到服務器。
這個問題對我來說很重要,因爲我想爲Android設備編寫模擬gps設備功能的Android設備應用程序!
2:我研究如何從服務器連接到android設備並獲取有關mqtt的信息!我可以使用mqtt從服務器連接到Android設備嗎?
模擬Android設備上的這些設備功能需要知道哪個服務器或設備連接到其他併發送數據?全球定位系統設備與服務器的通信功能

+0

如果設備生成數據,最好將它發送到服務器,而不是在一段時間後將數據發送到服務器池。與服務器通信的服務器是好的,當服務器有東西要告訴設備或要求設備不頻繁的數據。如果您的GPS數據真的很少,或者您只想在有些時候收集它(例如現在使用這些設備),請使用mqtt。 – Hassan 2012-04-22 22:44:55

+0

據我所知,MQTT告訴我,這是一種基於短信的通信模式,在這種模式下,您的應用程序將攔截SMSes並從服務器處理特定格式的內容。作爲迴應,您可以通過互聯網請求或SMS將數據發送回服務器。 – Hassan 2012-04-22 22:48:48

+1

感謝您的幫助,我想創建一個擁有Android設備會員的網站,並收集他們的位置並在網站上顯示他們的位置信息,例如我想要獲取交通公司的車輛位置並向管理員顯示他們的信息!有這樣的網站使用GPS設備從車輛獲取信息,但我不知道哪些服務器或GPS設備連接到其他,併發送信息!我想獲得及時的車輛位置和顯示管理員爲此目的服務器連接到設備或設備連接到服務器併發送數據? – user1344766 2012-04-23 08:13:26

回答

1

首先,您需要獲取設備上的位置位置,然後將其發送到您的服務器,以便您可以顯示此信息。務實的代碼,你需要的東西,如來獲得設備上的位置:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates("gps", 60000, 0, locationListener); 

private final LocationListener locationListener = new LocationListener() { 
     public void onLocationChanged(Location location) { 
      // Here you have both location.getLatitude() and location.getLongitude() 
     } 
     public void onProviderDisabled(String provider){} 
     public void onProviderEnabled(String provider) {} 
     public void onStatusChanged(String provider, int status, Bundle extras) {} 
}; 

瞭解有關在Android上位置的詳細信息,請參閱官方文檔上User Location

當你完成位置部分,你可以開始發送它到你的服務器。考慮爲此使用JSON。

讓我們看看你有一個字符串行「latitudelongitude」,則需要先構建JSON對象:

public JSONObject buildJSONObject(String line) { 
     String[] toJson = line.split(" "); 
     JSONObject object = new JSONObject(); 
     try { 
      object.put("latitude", toJson[0]); 
      object.put("longitude", toJson[1]); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return object; 
} 

然後您可以像這樣的東西它發送給服務器:

public boolean sendTraceLineToServer(JSONObject line) { 
    // The mock server IP is 10.0.2.2, just for testing purposes 
    // This server receives a JSON with format {"location":{"latitude":xx.xx, "longitude":yy.yy}} 
    HttpPost httpPost = new HttpPost("http://10.0.2.2:3000/locations"); 
    DefaultHttpClient client = new DefaultHttpClient(); 
    JSONObject holder = new JSONObject(); 

    boolean sent = false; 

    try { 
     holder.put("location", line); 

     StringEntity se = new StringEntity(holder.toString()); 
     httpPost.setEntity(se); 
     httpPost.setHeader("Content-Type","application/json"); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    HttpResponse response = null; 

    try { 
     response = client.execute(httpPost); 
     sent = true; 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
     Log.e("ClientProtocol",""+e); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e("IO",""+e); 
    } 

    HttpEntity entity = response.getEntity(); 

    if (entity != null) { 
     try { 
      entity.consumeContent(); 
     } catch (IOException e) { 
      Log.e("IO E",""+e); 
      e.printStackTrace(); 
     } 
    } 
    return sent; 
} 

Here你有更多關於如何發佈JSON到服務器的例子。

在服務器上,對我來說,我寫在Rails,我創建接收JSON一樣簡單的方法:

# POST /locations 
# POST /locations.xml 

def create 
    @location = Location.new(params[:location]) 
    respond_to do |format| 
     if @location.save 
     format.json { render :json => @location, :status => :created, :location => @location } 
     else 
     format.json { render :json => @location.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

,就是這樣,在設備上的位置,利用它發送HTTP與JSON,並在示例Rails服務器上接收。

+0

感謝您在這些代碼中的幫助設備發送信息到服務器我不知道在http://gpstrackit.com/這樣的站點中使用了哪種機制設備發送信息到服務器或服務器獲取特定車輛的信息? – user1344766 2012-04-23 08:59:52

+0

@ user1344766,他們提供的產品,所以如果你可以購買它並不重要背後的技術,但它是否解決你的問題。既然你在這裏發佈了一個與Android有關的問題,我認爲你想自己動手,因此,我的答案爲你提供了完成這個任務的基本框架。我認爲你可以這樣做,如果要求像發送位置信息那麼簡單。如果我的答案符合您的需求,請將其標記爲如此。 – Eduardo 2012-04-23 09:07:16

+0

我可以爲iPhone或Windows移動設備等其他平臺擴展此解決方案嗎? – user1344766 2012-04-23 10:31:44