package lab.sodino.location; |
002 |
003 | import java.io.BufferedReader; |
004 | import java.io.IOException; |
005 | import java.io.InputStream; |
006 | import java.io.InputStreamReader; |
007 | import java.io.UnsupportedEncodingException; |
008 | import org.apache.http.HttpEntity; |
009 | import org.apache.http.HttpResponse; |
010 | import org.apache.http.client.ClientProtocolException; |
011 | import org.apache.http.client.methods.HttpPost; |
012 | import org.apache.http.entity.StringEntity; |
013 | import org.apache.http.impl.client.DefaultHttpClient; |
014 | import org.json.JSONArray; |
015 | import org.json.JSONException; |
016 | import org.json.JSONObject; |
017 | import android.app.Activity; |
018 | import android.content.Context; |
019 | import android.os.Bundle; |
020 | import android.telephony.TelephonyManager; |
021 | import android.telephony.gsm.GsmCellLocation; |
022 | import android.view.View; |
023 | import android.widget.Button; |
024 | import android.widget.TextView; |
025 |
026 | /** |
027 | * Google定位的实现.<br/> |
028 | * Geolocation的详细信息请参见:<br/> |
029 | * <a |
030 | * href="http://code.google.com/apis/gears/geolocation_network_protocol.html"> |
031 | * http://code.google.com/apis/gears/geolocation_network_protocol.html</a> |
032 | */ |
033 | public class LocationAct extends Activity { |
034 | private TextView txtInfo; |
035 | public void onCreate(Bundle savedInstanceState) { |
036 | super.onCreate(savedInstanceState); |
037 | setContentView(R.layout.main); |
038 | Button btn = (Button) findViewById(R.id.btnStart); |
039 | txtInfo = (TextView) findViewById(R.id.txtInfo); |
040 | btn.setOnClickListener(new Button.OnClickListener() { |
041 | public void onClick(View view) { |
042 | getLocation(); |
043 | } |
044 | }); |
045 | } |
046 | private void getLocation() { |
047 | TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); |
048 | GsmCellLocation gsmCell = (GsmCellLocation) tm.getCellLocation(); |
049 | int cid = gsmCell.getCid(); |
050 | int lac = gsmCell.getLac(); |
051 | String netOperator = tm.getNetworkOperator(); |
052 | int mcc = Integer.valueOf(netOperator.substring(0, 3)); |
053 | int mnc = Integer.valueOf(netOperator.substring(3, 5)); |
054 | JSONObject holder = new JSONObject(); |
055 | JSONArray array = new JSONArray(); |
056 | JSONObject data = new JSONObject(); |
057 | try { |
058 | holder.put("version", "1.1.0"); |
059 | holder.put("host", "maps.google.com"); |
060 | holder.put("address_language", "zh_CN"); |
061 | holder.put("request_address", true); |
062 | holder.put("radio_type", "gsm"); |
063 | holder.put("carrier", "HTC"); |
064 | data.put("cell_id", cid); |
065 | data.put("location_area_code", lac); |
066 | data.put("mobile_countyr_code", mcc); |
067 | data.put("mobile_network_code", mnc); |
068 | array.put(data); |
069 | holder.put("cell_towers", array); |
070 | } catch (JSONException e) { |
071 | e.printStackTrace(); |
072 | } |
073 | DefaultHttpClient client = new DefaultHttpClient(); |
074 | HttpPost httpPost = new HttpPost("http://www.google.com/loc/json"); |
075 | StringEntity stringEntity = null; |
076 | try { |
077 | stringEntity = new StringEntity(holder.toString()); |
078 | } catch (UnsupportedEncodingException e) { |
079 | e.printStackTrace(); |
080 | } |
081 | httpPost.setEntity(stringEntity); |
082 | HttpResponse httpResponse = null; |
083 | try { |
084 | httpResponse = client.execute(httpPost); |
085 | } catch (ClientProtocolException e) { |
086 | e.printStackTrace(); |
087 | } catch (IOException e) { |
088 | e.printStackTrace(); |
089 | } |
090 | HttpEntity httpEntity = httpResponse.getEntity(); |
091 | InputStream is = null; |
092 | try { |
093 | is = httpEntity.getContent(); |
094 | } catch (IllegalStateException e) { |
095 | e.printStackTrace(); |
096 | } catch (IOException e) { |
097 | // TODO Auto-generated catch block |
098 | e.printStackTrace(); |
099 | } |
100 | InputStreamReader isr = new InputStreamReader(is); |
101 | BufferedReader reader = new BufferedReader(isr); |
102 | StringBuffer stringBuffer = new StringBuffer(); |
103 | try { |
104 | String result = ""; |
105 | while ((result = reader.readLine()) != null) { |
106 | stringBuffer.append(result); |
107 | } |
108 | } catch (IOException e) { |
109 | e.printStackTrace(); |
110 | } |
111 | System.out.println("[sodino]" + stringBuffer.toString()); |
112 | txtInfo.setText(stringBuffer.toString()); |
113 | } |
114 | } |
[代码] 权限设定
1 | <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> |
2 | <uses-permission android:name="android.permission.INTERNET"></uses-permission> |
[图片] 1.jpg
本文介绍了一个基于Android的应用案例,该应用通过Google定位API获取设备的位置信息。文章详细展示了如何使用TelephonyManager和GsmCellLocation获取基站信息,并构建JSON请求发送给Google定位服务器,最后解析返回的位置数据。

928

被折叠的 条评论
为什么被折叠?



