集合了gps、wifi、基站定位。
其中GPS定位首先是GpsTask类异步返回GPS经纬度信息
IAddressTask封装了获取地理位置的方法,具体代码如下:
其中GPS定位首先是GpsTask类异步返回GPS经纬度信息
01.GpsTask gpstask = new GpsTask(GpsActivity.this,new GpsTaskCallBack() { @Override
02.public void gpsConnectedTimeOut() {
03.gps_tip.setText("获取GPS超时了");
04.}
05.@Override
06.public void gpsConnected(GpsData gpsdata) {
07.do_gps(gpsdata);
08.}
09.}, 3000);
10.gpstask.execute();
其中3000是设置获取gps数据timeout时间。GpsTask是根据
01.locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
获取最后一次GPS信息,如果返回为Null则是根据监听获取Location信息发生改变时返回的GPS信息。因为手机获取GPS信息时间比较长,所以这个类实际使用时可能还存在一些BUG。
IAddressTask封装了获取地理位置的方法,具体代码如下:
01.package com.maxtech.common.gps;
02.
03.import java.io.BufferedReader;
04.import java.io.InputStreamReader;
05.import org.apache.http.HttpEntity;
06.import org.apache.http.HttpResponse;
07.import org.json.JSONArray;
08.import org.json.JSONObject;
09.import android.app.Activity;
10.import android.content.Context;
11.import android.net.wifi.WifiManager;
12.import android.telephony.TelephonyManager;
13.import android.telephony.gsm.GsmCellLocation;
14.
15.public abstract class IAddressTask {
16. protected Activity context;
17.
18. public IAddressTask(Activity context) {
19. this.context = context;
20. }
21.
22. public abstract HttpResponse execute(JSONObject params) throws Exception;
23.
24. public MLocation doWifiPost() throws Exception {
25. return transResponse(execute(doWifi()));
26. }
27.
28. public MLocation doApnPost() throws Exception {
29. return transResponse(execute(doApn()));
30. }
31.
32. public MLocation doGpsPost(double lat, double lng) throws Exception {
33. return transResponse(execute(doGps(lat, lng)));
34. }
35.
36. private MLocation transResponse(HttpResponse response) {
37. MLocation location = null;
38. if (response.getStatusLine().getStatusCode() == 200) {
39. location = new MLocation();
40. HttpEntity entity = response.getEntity();
41. BufferedReader br;
42. try {
43. br = new BufferedReader(new InputStreamReader(
44. entity.getContent()));
45. StringBuffer sb = new StringBuffer();
46. String result = br.readLine();
47. while (result != null) {
48. sb.append(result);
49. result = br.readLine();
50. }
51. JSONObject json = new JSONObject(sb.toString());
52. JSONObject lca = json.getJSONObject("location");
53. location.Access_token = json.getString("access_token");
54. if (lca != null) {
55. if (lca.has("accuracy"))
56. location.Accuracy = lca.getString("accuracy");
57. if (lca.has("longitude"))
58. location.Latitude = lca.getDouble("longitude");
59. if (lca.has("latitude"))
60. location.Longitude = lca.getDouble("latitude");
61. if (lca.has("address")) {
62. JSONObject address = lca.getJSONObject("address");
63. if (address != null) {
64. if (address.has("region"))
65. location.Region = address.getString("region");
66. if (address.has("street_number"))
67. location.Street_number = address
68. .getString("street_number");
69. if (address.has("country_code"))
70. location.Country_code = address
71. .getString("country_code");
72. if (address.has("street"))
73. location.Street = address.getString("street");
74. if (address.has("city"))
75. location.City = address.getString("city");
76. if (address.has("country"))
77. location.Country = address.getString("country");
78. }
79. }
80. }
81. } catch (Exception e) {
82. e.printStackTrace();
83. location = null;
84. }
85. }
86. return location;
87. }
88.
89. private JSONObject doGps(double lat, double lng) throws Exception {
90. JSONObject holder = new JSONObject();
91. holder.put("version", "1.1.0");
92. holder.put("host", "maps.google.com");
93. holder.put("address_language", "zh_CN");
94. holder.put("request_address", true);
95. JSONObject data = new JSONObject();
96. data.put("latitude", lat);
97. data.put("longitude", lng);
98. holder.put("location", data);
99. return holder;
100. }
101.
102. private JSONObject doApn() throws Exception {
103. JSONObject holder = new JSONObject();
104. holder.put("version", "1.1.0");
105. holder.put("host", "maps.google.com");
106. holder.put("address_language", "zh_CN");
107. holder.put("request_address", true);
108. TelephonyManager tm = (TelephonyManager) context
109. .getSystemService(Context.TELEPHONY_SERVICE);
110. GsmCellLocation gcl = (GsmCellLocation) tm.getCellLocation();
111. int cid = gcl.getCid();
112. int lac = gcl.getLac();
113. int mcc = Integer.valueOf(tm.getNetworkOperator().substring(0, 3));
114. int mnc = Integer.valueOf(tm.getNetworkOperator().substring(3, 5));
115. JSONArray array = new JSONArray();
116. JSONObject data = new JSONObject();
117. data.put("cell_id", cid);
118. data.put("location_area_code", lac);
119. data.put("mobile_country_code", mcc);
120. data.put("mobile_network_code", mnc);
121. array.put(data);
122. holder.put("cell_towers", array);
123. return holder;
124. }
125.
126. private JSONObject doWifi() throws Exception {
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); WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if(wifiManager.getConnectionInfo().getBSSID() == null) { throw new RuntimeException("bssid is null"); } JSONArray array = new JSONArray(); JSONObject data = new JSONObject(); data.put("mac_address", wifiManager.getConnectionInfo().getBSSID()); data.put("signal_strength", 8); data.put("age", 0); array.put(data); holder.put("wifi_towers", array); return holder; } public static class MLocation {
127. public String Access_token;
128. public double Latitude;
129. public double Longitude;
130. public String Accuracy;
131. public String Region;
132. public String Street_number;
133. public String Country_code;
134. public String Street;
135. public String City;
136. public String Country;
137.
138. @Override
139. public String toString() {
140. StringBuffer buffer = new StringBuffer();
141. buffer.append("Access_token:" + Access_token + "\n");
142. buffer.append("Region:" + Region + "\n");
143. buffer.append("Accuracy:" + Accuracy + "\n");
144. buffer.append("Latitude:" + Latitude + "\n");
145. buffer.append("Longitude:" + Longitude + "\n");
146. buffer.append("Country_code:" + Country_code + "\n");
147. buffer.append("Country:" + Country + "\n");
148. buffer.append("City:" + City + "\n");
149. buffer.append("Street:" + Street + "\n");
150. buffer.append("Street_number:" + Street_number + "\n");
151. return buffer.toString();
152. }
153. }
154.}
01.package com.maxtech.common;
02.
03.import com.maxtech.common.gps.GpsTask;
04.import com.maxtech.common.gps.GpsTaskCallBack;
05.import com.maxtech.common.gps.GpsTask.GpsData;
06.import com.maxtech.common.gps.IAddressTask.MLocation;
07.import android.app.Activity;
08.import android.app.AlertDialog;
09.import android.app.ProgressDialog;
10.import android.os.AsyncTask;
11.import android.os.Bundle;
12.import android.util.Log;
13.import android.view.View;
14.import android.view.View.OnClickListener;
15.import android.widget.TextView;
16.
17.public class GpsActivity extends Activity implements OnClickListener {
18. private TextView gps_tip = null;
19. private AlertDialog dialog = null;
20.
21. @Override
22. public void onCreate(Bundle savedInstanceState) {
23. super.onCreate(savedInstanceState);
24. setContentView(R.layout.main);
25. gps_tip = (TextView) findViewById(R.id.gps_tip);
26. findViewById(R.id.do_gps).setOnClickListener(GpsActivity.this);
27. findViewById(R.id.do_apn).setOnClickListener(GpsActivity.this);
28. findViewById(R.id.do_wifi).setOnClickListener(GpsActivity.this);
29. dialog = new ProgressDialog(GpsActivity.this);
30. dialog.setTitle("请稍等...");
31. dialog.setMessage("正在定位...");
32. }
33.
34. @SuppressWarnings("unchecked")
35. @Override
36. public void onClick(View v) {
37. gps_tip.setText("");
38. switch (v.getId()) {
39. case R.id.do_apn:
40. do_apn();
41. break;
42. case R.id.do_gps:
43. GpsTask gpstask = new GpsTask(GpsActivity.this,
44. new GpsTaskCallBack() {
45. @Override
46. public void gpsConnectedTimeOut() {
47. gps_tip.setText("获取GPS超时了");
48. }
49.
50. @Override
51. public void gpsConnected(GpsData gpsdata) {
52. do_gps(gpsdata);
53. }
54. }, 3000);
55. gpstask.execute();
56. break;
57. case R.id.do_wifi:
58. do_wifi();
59. break;
60. }
61. }
62.
63. private void do_apn() {
64. new AsyncTask<Void, Void, String>() {
65. @Override
66. protected String doInBackground(Void... params) {
67. MLocation location = null;
68. try {
69. location = new AddressTask(GpsActivity.this,
70. AddressTask.DO_APN).doApnPost();
71. } catch (Exception e) {
72. e.printStackTrace();
73. }
74. if (location == null)
75. return null;
76. return location.toString();
77. }
78.
79. @Override
80. protected void onPreExecute() {
81. dialog.show();
82. super.onPreExecute();
83. }
84.
85. @Override
86. protected void onPostExecute(String result) {
87. if (result == null) {
88. gps_tip.setText("基站定位失败了...");
89. } else {
90. gps_tip.setText(result);
91. }
92. dialog.dismiss();
93. super.onPostExecute(result);
94. }
95. }.execute();
96. }
97.
98. private void do_gps(final GpsData gpsdata) {
99. new AsyncTask<Void, Void, String>() {
100. @Override
101. protected String doInBackground(Void... params) {
102. MLocation location = null;
103. try {
104. Log.i("do_gpspost", "经纬度:" + gpsdata.getLatitude() + "----"
105. + gpsdata.getLongitude());
106. location = new AddressTask(GpsActivity.this,
107. AddressTask.DO_GPS).doGpsPost(
108. gpsdata.getLatitude(), gpsdata.getLongitude());
109. } catch (Exception e) {
110. e.printStackTrace();
111. }
112. if (location == null)
113. return "GPS信息获取错误";
114. return location.toString();
115. }
116.
117. @Override
118. protected void onPreExecute() {
119. dialog.show();
120. super.onPreExecute();
121. }
122.
123. @Override
124. protected void onPostExecute(String result) {
125. gps_tip.setText(result);
126. dialog.dismiss();
127. super.onPostExecute(result);
128. }
129. }.execute();
130. }
131.
132. private void do_wifi() {
133. new AsyncTask<Void, Void, String>() {
134. @Override
135. protected String doInBackground(Void... params) {
136. MLocation location = null;
137. try {
138. location = new AddressTask(GpsActivity.this,
139. AddressTask.DO_WIFI).doWifiPost();
140. } catch (Exception e) {
141. e.printStackTrace();
142. }
143. if (location == null)
144. return null;
145. return location.toString();
146. }
147.
148. @Override
149. protected void onPreExecute() {
150. dialog.show();
151. super.onPreExecute();
152. }
153.
154. @Override
155. protected void onPostExecute(String result) {
156. if (result != null) {
157. gps_tip.setText(result);
158. } else {
159. gps_tip.setText("WIFI定位失败了...");
160. }
161. dialog.dismiss();
162. super.onPostExecute(result);
163. }
164. }.execute();
165. }
166.}
01.package com.maxtech.common;
02.import org.apache.http.HttpHost;
03.import org.apache.http.HttpResponse;
04.import org.apache.http.client.HttpClient;
05.import org.apache.http.client.methods.HttpPost;
06.import org.apache.http.conn.params.ConnRouteParams;
07.import org.apache.http.entity.StringEntity;
08.import org.apache.http.impl.client.DefaultHttpClient;
09.import org.apache.http.params.HttpConnectionParams;
10.import org.json.JSONObject;
11.import android.app.Activity;
12.import android.database.Cursor;
13.import android.net.Uri;
14.import com.maxtech.common.gps.IAddressTask;
15.public class AddressTask extends IAddressTask {
16. public static final int DO_APN = 0;
17. public static final int DO_WIFI = 1;
18. public static final int DO_GPS = 2;
19. private int postType = -1;
20. public AddressTask(Activity context, int postType) {
21. super(context);
22. this.postType = postType;
23. }
24. @Override
25. public HttpResponse execute(JSONObject params) throws Exception {
26. HttpClient httpClient = new DefaultHttpClient();
27. HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 20 * 1000);
28. HttpConnectionParams.setSoTimeout(httpClient.getParams(), 20 * 1000);
29. HttpPost post = new HttpPost("http://74.125.71.147/loc/json"); // 设置代理
30. if (postType == DO_APN) {
31. Uri uri = Uri.parse("content://telephony/carriers/preferapn"); // 获取当前正在使用的APN接入点
32. Cursor mCursor = context.getContentResolver().query(uri, null,null, null, null);
33. if (mCursor != null) {
34. if(mCursor.moveToFirst()) {
35. String proxyStr = mCursor.getString(mCursor.getColumnIndex("proxy"));
36. if (proxyStr != null && proxyStr.trim().length() > 0) {
37. HttpHost proxy = new HttpHost(proxyStr, 80);
38. httpClient.getParams().setParameter(
39. ConnRouteParams.DEFAULT_PROXY, proxy);
40. }
41. }
42. }
43. }
44. StringEntity se = new StringEntity(params.toString());
45. post.setEntity(se);
46. HttpResponse response = httpClient.execute(post);
47. return response;
48. }
49. }
50. }
51. }
52.}