Android的基站、WIFI、GPS定位集合【源码】

来源:互联网 发布:网络销售平台策划方案 编辑:程序博客网 时间:2024/04/29 19:26

集合了gps、wifi、基站定位。

其中GPS定位首先是GpsTask类异步返回GPS经纬度信息






Android的基站、WIFI、GPS定位集合【源码】下载地址:

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /pub/Android源码集锦/2011年/11月/Android的基站、WIFI、GPS定位集合【源码】/

----------------------分割线----------------------

GpsTask gpstask = new GpsTask(GpsActivity.this,                    new GpsTaskCallBack() {                        @Override                        public void gpsConnectedTimeOut() {                            gps_tip.setText("获取GPS超时了");                        }                        @Override                        public void gpsConnected(GpsData gpsdata) {                            do_gps(gpsdata);                        }                    }, 3000);            gpstask.execute();

其中3000是设置获取gps数据timeout时间。GpsTask是根据

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);


获取最后一次GPS信息,如果返回为Null则是根据监听获取Location信息发生改变时返回的GPS信息。因为手机获取GPS信息时间比较长,所以这个类实际使用时可能还存在一些BUG。

IAddressTask封装了获取地理位置的方法,具体代码如下:

package com.maxtech.common.gps;import java.io.BufferedReader;import java.io.InputStreamReader;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.json.JSONArray;import org.json.JSONObject;import Android.app.Activity;import Android.content.Context;import Android.net.wifi.WifiManager;import Android.telephony.TelephonyManager;import Android.telephony.gsm.GsmCellLocation;public abstract class IAddressTask {    protected Activity context;        public IAddressTask(Activity context) {        this.context = context;    }        public abstract HttpResponse execute(JSONObject params) throws Exception;        public MLocation doWifiPost() throws Exception {        return transResponse(execute(doWifi()));    }        public MLocation doApnPost() throws Exception  {        return transResponse(execute(doApn()));    }        public MLocation doGpsPost(double lat, double lng) throws Exception {        return transResponse(execute(doGps(lat, lng)));    }    private MLocation transResponse(HttpResponse response) {        MLocation location = null;        if (response.getStatusLine().getStatusCode() == 200) {            location = new MLocation();            HttpEntity entity = response.getEntity();            BufferedReader br;            try {                br = new BufferedReader(new InputStreamReader(                        entity.getContent()));                StringBuffer sb = new StringBuffer();                String result = br.readLine();                while (result != null) {                    sb.append(result);                    result = br.readLine();                }                JSONObject json = new JSONObject(sb.toString());                JSONObject lca = json.getJSONObject("location");                location.Access_token = json.getString("access_token");                if (lca != null) {                    if(lca.has("accuracy"))                        location.Accuracy = lca.getString("accuracy");                    if(lca.has("longitude"))                        location.Latitude = lca.getDouble("longitude");                    if(lca.has("latitude"))                        location.Longitude = lca.getDouble("latitude");                    if(lca.has("address")) {                        JSONObject address = lca.getJSONObject("address");                        if (address != null) {                            if(address.has("region"))                                location.Region = address.getString("region");                            if(address.has("street_number"))                                location.Street_number = address                                        .getString("street_number");                            if(address.has("country_code"))                                location.Country_code = address                                        .getString("country_code");                            if(address.has("street"))                                location.Street = address.getString("street");                            if(address.has("city"))                                location.City = address.getString("city");                            if(address.has("country"))                                location.Country = address.getString("country");                        }                    }                }            } catch (Exception e) {                e.printStackTrace();                location = null;            }        }        return location;    }    private JSONObject doGps(double lat, double lng) 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);                JSONObject data = new JSONObject();        data.put("latitude", lat);        data.put("longitude", lng);        holder.put("location", data);        return holder;    }        private JSONObject doApn() 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);                TelephonyManager tm = (TelephonyManager) context                .getSystemService(Context.TELEPHONY_SERVICE);        GsmCellLocation gcl = (GsmCellLocation) tm.getCellLocation();        int cid = gcl.getCid();        int lac = gcl.getLac();        int mcc = Integer.valueOf(tm.getNetworkOperator().substring(0,                3));        int mnc = Integer.valueOf(tm.getNetworkOperator().substring(3,                5));                JSONArray array = new JSONArray();        JSONObject data = new JSONObject();        data.put("cell_id", cid);        data.put("location_area_code", lac);        data.put("mobile_country_code", mcc);        data.put("mobile_network_code", mnc);        array.put(data);        holder.put("cell_towers", array);                return holder;    }        private JSONObject doWifi() throws Exception {<br />        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 {        public String Access_token;        public double Latitude;        public double Longitude;        public String Accuracy;        public String Region;        public String Street_number;        public String Country_code;        public String Street;        public String City;        public String Country;        @Override        public String toString() {            StringBuffer buffer = new StringBuffer();            buffer.append("Access_token:" + Access_token + "\n");            buffer.append("Region:" + Region + "\n");            buffer.append("Accuracy:" + Accuracy + "\n");            buffer.append("Latitude:" + Latitude + "\n");            buffer.append("Longitude:" + Longitude + "\n");            buffer.append("Country_code:" + Country_code + "\n");            buffer.append("Country:" + Country + "\n");            buffer.append("City:" + City + "\n");            buffer.append("Street:" + Street + "\n");            buffer.append("Street_number:" + Street_number + "\n");            return buffer.toString();        }    }}
package com.maxtech.common;import org.apache.http.HttpHost;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.params.ConnRouteParams;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.HttpConnectionParams;import org.json.JSONObject;import Android.app.Activity;import Android.database.Cursor;import Android.net.Uri;import com.maxtech.common.gps.IAddressTask;public class AddressTask extends IAddressTask {    public static final int DO_APN = 0;    public static final int DO_WIFI = 1;    public static final int DO_GPS = 2;    private int postType = -1;        public AddressTask(Activity context, int postType) {        super(context);        this.postType = postType;    }        @Override    public HttpResponse execute(JSONObject params) throws Exception {        HttpClient httpClient = new DefaultHttpClient();        HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),                20 * 1000);        HttpConnectionParams.setSoTimeout(httpClient.getParams(), 20 * 1000);        HttpPost post = new HttpPost("http://74.125.71.147/loc/json");        // 设置代理        if (postType == DO_APN) {            Uri uri = Uri.parse("content://telephony/carriers/preferapn"); // 获取当前正在使用的APN接入点            Cursor mCursor = context.getContentResolver().query(uri, null,                    null, null, null);            if (mCursor != null) {                if(mCursor.moveToFirst()) {                    String proxyStr = mCursor.getString(mCursor                            .getColumnIndex("proxy"));                    if (proxyStr != null && proxyStr.trim().length() > 0) {                        HttpHost proxy = new HttpHost(proxyStr, 80);                        httpClient.getParams().setParameter(                                ConnRouteParams.DEFAULT_PROXY, proxy);                    }                }            }        }                StringEntity se = new StringEntity(params.toString());        post.setEntity(se);        HttpResponse response = httpClient.execute(post);        return response;    }}
package com.maxtech.common;import com.maxtech.common.gps.GpsTask;import com.maxtech.common.gps.GpsTaskCallBack;import com.maxtech.common.gps.GpsTask.GpsData;import com.maxtech.common.gps.IAddressTask.MLocation;import Android.app.Activity;import Android.app.AlertDialog;import Android.app.ProgressDialog;import Android.os.AsyncTask;import Android.os.Bundle;import Android.util.Log;import Android.view.View;import Android.view.View.OnClickListener;import Android.widget.TextView;public class GpsActivity extends Activity implements OnClickListener {    private TextView gps_tip = null;    private AlertDialog dialog = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                gps_tip = (TextView) findViewById(R.id.gps_tip);        findViewById(R.id.do_gps).setOnClickListener(GpsActivity.this);        findViewById(R.id.do_apn).setOnClickListener(GpsActivity.this);        findViewById(R.id.do_wifi).setOnClickListener(GpsActivity.this);        dialog = new ProgressDialog(GpsActivity.this);        dialog.setTitle("请稍等...");        dialog.setMessage("正在定位...");    }    @SuppressWarnings("unchecked")    @Override    public void onClick(View v) {        gps_tip.setText("");        switch (v.getId()) {        case R.id.do_apn:            do_apn();            break;        case R.id.do_gps:            GpsTask gpstask = new GpsTask(GpsActivity.this,                    new GpsTaskCallBack() {                        @Override                        public void gpsConnectedTimeOut() {                            gps_tip.setText("获取GPS超时了");                        }                        @Override                        public void gpsConnected(GpsData gpsdata) {                            do_gps(gpsdata);                        }                    }, 3000);            gpstask.execute();            break;        case R.id.do_wifi:            do_wifi();            break;        }    }    private void do_apn() {        new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                MLocation location = null;                try {                    location = new AddressTask(GpsActivity.this,                            AddressTask.DO_APN).doApnPost();                } catch (Exception e) {                    e.printStackTrace();                }                if(location == null)                    return null;                return location.toString();            }            @Override            protected void onPreExecute() {                dialog.show();                super.onPreExecute();            }            @Override            protected void onPostExecute(String result) {                if(result == null){                    gps_tip.setText("基站定位失败了...");                                    }else {                    gps_tip.setText(result);                }                dialog.dismiss();                super.onPostExecute(result);            }                    }.execute();    }    private void do_gps(final GpsData gpsdata) {        new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                MLocation location = null;                try {                    Log.i("do_gpspost", "经纬度:" + gpsdata.getLatitude() + "----" + gpsdata.getLongitude());                    location = new AddressTask(GpsActivity.this,                            AddressTask.DO_GPS).doGpsPost(gpsdata.getLatitude(),                                    gpsdata.getLongitude());                } catch (Exception e) {                    e.printStackTrace();                }                if(location == null)                    return "GPS信息获取错误";                return location.toString();            }            @Override            protected void onPreExecute() {                dialog.show();                super.onPreExecute();            }            @Override            protected void onPostExecute(String result) {                gps_tip.setText(result);                dialog.dismiss();                super.onPostExecute(result);            }                    }.execute();    }    private void do_wifi() {        new AsyncTask<Void, Void, String>() {            @Override            protected String doInBackground(Void... params) {                MLocation location = null;                try {                    location = new AddressTask(GpsActivity.this,                            AddressTask.DO_WIFI).doWifiPost();                } catch (Exception e) {                    e.printStackTrace();                }                if(location == null)                    return null;                return location.toString();            }            @Override            protected void onPreExecute() {                dialog.show();                super.onPreExecute();            }            @Override            protected void onPostExecute(String result) {                if(result != null){                    gps_tip.setText(result);                }else {                    gps_tip.setText("WIFI定位失败了...");                }                                dialog.dismiss();                super.onPostExecute(result);            }                    }.execute();    }}

原文地址:http://www.linuxidc.com/Linux/2011-11/48114p3.htm

原创粉丝点击