package com.nutiteq.location.cellid;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import org.json.me.JSONException;
import org.json.me.JSONObject;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import com.nutiteq.components.WgsPoint;
import com.nutiteq.log.Log;
import com.nutiteq.utils.IOUtils;
import com.nutiteq.utils.Utils;
/**
* CellId using <a
* href="https://labs.ericsson.com/apis/mobile-location/">Ericsson Labs Mobile
* Location API</a>
*/
public class EricssonLocationApiService extends OnlineCellIdService {
private static final String BASEURL = "http://cellid.labs.ericsson.net/json/lookup?";
private String ericssonKey;
public EricssonLocationApiService(String ericssonKey) {
this.ericssonKey = ericssonKey;
}
public String createRequestUrl(final String cellId, final String lac, final String mcc, final String mnc) {
return new StringBuffer(BASEURL).append("cellid=").append(cellId).append("&mcc=").append(mcc).append("&mnc=").append(mnc).append("&lac=").append(lac).append("&key=").append(ericssonKey).toString();
}
public void parseResponse(final CellIdResponseWaiter responseWaiter, final String response) {
parseJSON(responseWaiter,response);
}
public void parseJSON(final CellIdResponseWaiter responseWaiter, String jsonString) {
try {
JSONObject o = new JSONObject(jsonString);
JSONObject pos = o.getJSONObject("position");
String longitude = pos.getString("longitude");
String latitude = pos.getString("latitude");
String accuracy = pos.getString("accuracy");
String cellName = pos.optString("name");
Log.debug("Cellid parsed: lon=" + longitude + " lat=" + latitude + " acc=" + accuracy + " name=" + cellName);
final WgsPoint location = Utils.parseWgsFromString(longitude, latitude);
if (location == null) {
responseWaiter.notifyError();
}
responseWaiter.locationRetrieved(location);
} catch (Exception e) {
responseWaiter.notifyError();
Log.error("Can't read location" + e.getMessage());
Log.printStackTrace(e);
}
}
}