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
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
}