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
![](http://static.oschina.net/uploads/code/201110/25103949_0hK6.jpg)