GPS设备与服务器的通信功能

时间:2012-04-22 17:57:38

标签: android gps

您好我想在Android设备中实现gps设备通信功能但我不知道这些设备如何与使用这些设备数据的服务器通信并将这些数据保存在服务器上。我不得不对这些设备提出疑问 1-Can服务器连接这些设备并获取数据并在服务器上保存数据?或者这些设备连接到服务器并将数据发送到服务器 这个问题对我很重要,因为我想在android设备上编写模拟gps设备功能的android设备的应用程序! 2:我研究如何从服务器连接到Android设备并获取有关mqtt的信息!我可以用mqtt从服务器连接到Android设备吗? 用于在Android设备上模拟这些设备功能需要知道哪个服务器或设备连接到其他设备并发送数据?

1 个答案:

答案 0 :(得分: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”的String行,你需要先构建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

就是它,设备上的位置,使用带有JSON的HTTP发送它,并在示例Rails服务器上接收。