ming_fanglin 发表于 2013-2-3 13:33:05

gps、wifi、基站定位

集合了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.}
页: [1]
查看完整版本: gps、wifi、基站定位