0

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

4

1 回答 1

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。

假设您有一个带有“纬度经度”的字符串行,您需要先构建 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;
}

这里有更多关于如何将 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 服务器上接收。

于 2012-04-23T08:52:09.297 回答