用途:
在高德地图中查看已存在的兴趣点信息,并上报GPS位置错误。
准备工作:
是在高德申请开发账号,建立一个云图。(过程略。)
_name字段作为唯一标示。
云图的表增加一个字段reportid,用以辨别是哪个终端上报的位置信息,防止重复上报。
主要代码:
1.开启GPS定位:
private void initgps() {
myLocation.setText("开始定位...");
locationManager = LocationManagerProxy.getInstance(PoiActivity.this);
// API定位采用GPS定位方式,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
// locationManager.requestLocationUpdates(
// LocationManagerProxy.GPS_PROVIDER, 2000, 10, this);
locationManager.requestLocationData(LocationManagerProxy.GPS_PROVIDER,
2000, 10, this);
}
2.关闭GPS定位:
private void stopgps() {
myLocation.setText("定位停止");
locationisok = false;
if (locationManager != null) {
locationManager.removeUpdates(this);
}
locationManager = null;
}
3.获取当前GPS信息
/**
* gps定位回调方法
*/
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null) {
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
this.lat = geoLat;
this.lng = geoLng;
String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
+ "\n精 度 :" + location.getAccuracy() + "米"
+ "\n定位方式:" + location.getProvider() + "\n定位时间:" + AMapUtil
.convertToTime(location.getTime()));
myLocation.setText(str);
thisplocation = geoLng + "," + geoLat;
locationisok = true;
} else {
locationisok = false;
}
}
4.获取手机串号作为reportid
private String getimei() {
String is = null;
try {
TelephonyManager telephonyManager = (TelephonyManager) cx
.getSystemService(Context.TELEPHONY_SERVICE);
is = telephonyManager.getDeviceId();
} catch (Exception e) {
is = "";
}
return is;
}
5.查询是否重复HttpGet方法
public int checkexist(String sname, String srid) {
// String sname 兴趣点名称, String srid 电话IMEI
String BASEURL = "http://yuntuapi.amap.com/datamanage/data/list?key=你的KEY"
+ "limit=10&page=1&filter=";
String LASTURL = "&tableid=你的tableid";
String asks = "";
// 检查IMEI是否为空
srid.replaceAll(" ", "");
if (srid == null || srid.length() <= 0) {
asks = "_name:" + sname;
} else {
asks = "_name:" + sname + "+reportid:" + srid;
}
;
String countid = "10";// 未成功获取信息,返回>1的数值供判断。
try {
// 创建一个HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(BASEURL + asks + LASTURL);
request.addHeader("Accept", "text/json");
// JSON的解析过程
HttpResponse response = httpclient.execute(request);
// 获取HttpEntity
HttpEntity entity = response.getEntity();
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
// 获取响应的结果信息
String json = EntityUtils.toString(entity, "UTF-8");
// JSON的解析过程
if (json != null) {
JSONObject jsonObject = new JSONObject(json);
countid = jsonObject.get("count").toString();
testcount = countid;
testinfo = jsonObject.get("info").toString();
}
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Integer.valueOf(countid).intValue();
}
6.上报GPS位置信息HttpPost方法
private boolean postreport(String sname, String sid, String slocation) {
String BASEURL = "http://yuntuapi.amap.com/datamanage/data/create?";
String KEYS = "你的KEY";
String TID = "你的tableid";
try {
HttpClient httpclient = new DefaultHttpClient();
String uri = BASEURL;//
HttpPost httppost = new HttpPost(uri);
httppost.addHeader("Content-Type",
"application/x-www-form-urluncoded");
JSONObject obj = new JSONObject();
obj.put("_name", sname);
obj.put("_location", slocation);
obj.put("reportid", sid);
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("key", KEYS));
formparams.add(new BasicNameValuePair("tableid", TID));
formparams.add(new BasicNameValuePair("data", obj.toString()));
UrlEncodedFormEntity uefEntity;
uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httppost.setEntity(uefEntity);
HttpResponse response;
response = httpclient.execute(httppost);
// 检验状态码,如果成功接收数据
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
String rev = EntityUtils.toString(response.getEntity());// 返回json格式:
obj = new JSONObject(rev);
String infos = obj.getString("info");
String stats = obj.getString("status");
if (infos.equals("OK")) {
return true;
}
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (Exception e) {
}
return false;
}
7.更新界面线程
private class Asynpost extends AsyncTask<Void, Void, String> {
private final String TAG = "dopost";
// onPreExecute方法在execute()后执行
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute() enter");
postisok = false;
}
// onCancelled方法用于取消Task执行,更新UI
@Override
protected void onCancelled() {
Log.i(TAG, "onCancelled() called");
postisok = false;
}
@Override
protected void onPostExecute(String result) {
// mPoiTextView.setText(result);
dissmissProgressDialog();
if (result.equals("true")) {
Toast.makeText(cx, "您的信息已成功提交", Toast.LENGTH_LONG)
.show();
}else if (result.equals("false")) {
Toast.makeText(cx, "您的信息提交失败,原因是:您已经提交过信息。",
Toast.LENGTH_LONG).show();
}else if (result.equals("error")){
Toast.makeText(cx, "您的信息提交失败,原因是:可能是网络问题,",
Toast.LENGTH_LONG).show();
};
}
@Override
protected String doInBackground(Void... arg0) {
// TODO Auto-generated method stub
String rr = "";
if (checkexist(thispname, repid) == 0) {
if (postreport(thispname, repid, thisplocation)){
postisok = true;
rr = "true";
}else{
postisok = false;
rr = "error";
};
} else {
postisok = false;
rr = "false";
}
return rr;
}
}