android 基于GeolocationAPI的基站定位

api 地址为http://code.google.com/p/gears/wiki/GeolocationAPI

发送的格式:

                              {
 "location": {
   "latitude": 51.0,
   "longitude": -0.1,
   "altitude": 30.1,
   "accuracy": 1200.1,
   "altitude_accuracy": 10.1,
   "address": {
     "street_number": "100",
     "street": "Amphibian Walkway",
     "postal_code": "94043",
     "city": "Mountain View",
     "county": "Mountain View County",
     "region": "California",
     "country": "United States of America",
     "country_code": "US"
   }
 }
}

返回的格式:              {
 "location": {
   "latitude": 51.0,
   "longitude": -0.1,
   "altitude": 30.1,
   "accuracy": 1200.1,
   "altitude_accuracy": 10.1,
   "address": {
     "street_number": "100",
     "street": "Amphibian Walkway",
     "postal_code": "94043",
     "city": "Mountain View",
     "county": "Mountain View County",
     "region": "California",
     "country": "United States of America",
     "country_code": "US"
   }
 }
}

  得到LAC 和CellId后,其它的就是json解析了;

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.Date; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.telephony.gsm.GsmCellLocation; import android.view.View; import android.widget.Button; import android.widget.TextView; public class LocationStation extends Activity { TextView mTextView; Button mButton; TelephonyManager tm; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextView = (TextView) findViewById(R.id.textView); mButton = (Button) findViewById(R.id.Button); tm = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); mButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub GsmCellLocation gcl = (GsmCellLocation) tm.getCellLocation(); int cid = gcl.getCid(); int lac = gcl.getLac(); System.out.println("operator"+tm.getNetworkOperator()); //中国移动43600 int mcc = Integer.valueOf(tm.getNetworkOperator().substring(0, 3)); int mnc = Integer.valueOf(tm.getNetworkOperator().substring(3, 5)); /* * 发送的格式:{ "version": "1.1.0" , "host": "maps.google.com", "access_token": "2:k7j3G6LaL6u_lafw:4iXOeOpTh1glSXe", "home_mobile_country_code": 460, "home_mobile_network_code":0, "address_language": "zh_CN", "radio_type": "gsm", "request_address": true , "cell_towers":[ { "cell_id":36526, "location_area_code":14556, "mobile_country_code":460, "mobile_network_code":0, "timing_advance":5555 } ] } */ try { // 组装JSON查询字符串 JSONObject holder = new JSONObject(); holder.put("version", "1.1.0"); holder.put("host", "maps.google.com"); holder.put("address_language", "zh_CN"); holder.put("request_address", true); JSONArray array = new JSONArray(); JSONObject data = new JSONObject(); data.put("cell_id", cid); // 25070 data.put("location_area_code", lac);// 4474 data.put("mobile_country_code", mcc);// 460 data.put("mobile_network_code", mnc);// 0 array.put(data); holder.put("cell_towers", array); // 创建连接,发送请求并接受回应 DefaultHttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost( "http://www.google.com/loc/json"); StringEntity se = new StringEntity(holder.toString()); post.setEntity(se); HttpResponse resp = client.execute(post); HttpEntity entity = resp.getEntity(); BufferedReader br = new BufferedReader( new InputStreamReader(entity.getContent())); StringBuffer sb = new StringBuffer(); String result = br.readLine(); while (result != null) { sb.append(result); result = br.readLine(); } /* * 返回格式: { "location": { "latitude": 51.0, "longitude": -0.1, "altitude": 30.1, "accuracy": 1200.1, "altitude_accuracy": 10.1, "address": { "street_number": "100", "street": "Amphibian Walkway", "postal_code": "94043", "city": "Mountain View", "county": "Mountain View County", "region": "California", "country": "United States of America", "country_code": "US" } } } */ JSONObject jsonObject = new JSONObject(sb.toString()); JSONObject jsonObject1 = new JSONObject(jsonObject .getString("location")); getAddress(jsonObject1.getString("latitude"), jsonObject1 .getString("longitude")); //mTextView.setText(sb.toString()); } catch (Exception e) { // TODO: handle exception } } }); } void getAddress(String lat, String lag) { try { URL url = new URL("http://maps.google.cn/maps/geo?key=abcdefg&q=" + lat + "," + lag); InputStream inputStream = url.openConnection().getInputStream(); InputStreamReader inputReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufReader = new BufferedReader(inputReader); String line = "", lines = ""; while ((line = bufReader.readLine()) != null) { lines += line; } if (!lines.equals("")) { JSONObject jsonobject = new JSONObject(lines); JSONArray jsonArray = new JSONArray(jsonobject.get("Placemark") .toString()); for (int i = 0; i < jsonArray.length(); i++) { mTextView.setText( jsonArray.getJSONObject(i).getString("address")); } } } catch (Exception e) { ; } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值