|
|
集合了gps、wifi、基站定位。
其中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 = address68. .getString("street_number");69. if (address.has("country_code"))70. location.Country_code = address71. .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) context109. .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. @Override139. 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. @Override22. 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. @Override36. 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. @Override46. public void gpsConnectedTimeOut() {47. gps_tip.setText("获取GPS超时了");48. }49.50. @Override51. 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. @Override66. 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. @Override80. protected void onPreExecute() {81. dialog.show();82. super.onPreExecute();83. }84.85. @Override86. 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. @Override101. 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. @Override118. protected void onPreExecute() {119. dialog.show();120. super.onPreExecute();121. }122.123. @Override124. 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. @Override135. 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. @Override149. protected void onPreExecute() {150. dialog.show();151. super.onPreExecute();152. }153.154. @Override155. 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.} |
|