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
- Android的基站、WIFI、GPS定位集合【源码】
- android gps wifi 基站 定位集合
- android gps ,wifi ,基站定位集合
- Android gps wifi 基站 定位集合
- android gps wifi 基站定位
- android GPS定位,基站定位,WIFI定位开关的控制
- 基站、wifi、GPS定位
- 详解Android GPS 基站 WiFi 定位
- android GPS定位,基站定位,WIFI定位开关的控制 (转)
- GPS定位、基站定位、wifi定位
- Android附近基站+Wifi+IP+GPS多渠道定位方案
- Android附近基站+Wifi+IP+GPS多渠道定位方案
- gps、基站、wifi定位是如何实现的
- android 基站定位 wifi定位
- 通过gps,wifi,基站定位获取当前位置
- 浅析手机定位---GPS、基站、AGPS、WIFI
- android下GPS基站定位
- android 使用基站 wifi定位
- iphone获得系统邮箱地址
- C++技巧
- 一切都只是借口
- 取得本地IP
- ajax预加载显示页面
- Android的基站、WIFI、GPS定位集合【源码】
- IIS 7添加Memi
- css+div 总结
- 串口接线
- java内存
- cc1101 wor 无线唤醒 地址过滤 同步字过滤 例子程序 430
- Oracle 中关于null值的概念以及逻辑运算
- 根据日期计算星期
- 一枕落花香