android WIFI定位和基站定位实现

来源:互联网 作者:佚名 时间:2015-04-01 13:38

关于定位原理网上很多,这里就不多说了。下面说怎么实现的,直接贴代码如下:首先是Util类:import java.io.BufferedReader;import java.io.InputStreamReader;i

关于定位原理网上很多,这里就不多说了。下面说怎么实现的,,直接贴代码如下:

首先是Util类:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.json.JSONArray;

import org.json.JSONObject;

import android.content.Context;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.util.Log;

public class Util {

//log的标签

public static final String TAG = "location";

public static final boolean DEBUG = true;

public static final String LOCATION_URL = "";

public static final String LOCATION_HOST = "maps.google.com";

public static void logi(String content){

if(DEBUG) {

Log.i(TAG, content);

}

}

public static void loge(String content){

if(DEBUG) {

Log.e(TAG, content);

}

}

public static void logd(String content){

if(DEBUG) {

Log.d(TAG, content);

}

}

/**

* 获取地理位置

*

* @throws Exception

*/

public static String getLocation(String latitude, String longitude) throws Exception {

String resultString = "";

/** 这里采用get方法,直接将参数加到URL上 */

String urlString = String.format("?key=abcdefg&q=%s,%s", latitude, longitude);

Util.logi("Util: getLocation: URL: " + urlString);

/** 新建HttpClient */

HttpClient client = new DefaultHttpClient();

/** 采用GET方法 */

HttpGet get = new HttpGet(urlString);

try {

/** 发起GET请求并获得返回数据 */

HttpResponse response = client.execute(get);

HttpEntity entity = response.getEntity();

BufferedReader buffReader = new BufferedReader(new InputStreamReader(entity.getContent()));

StringBuffer strBuff = new StringBuffer();

String result = null;

while ((result = buffReader.readLine()) != null) {

strBuff.append(result);

}

resultString = strBuff.toString();

/** 解析JSON数据,获得物理地址 */

if (resultString != null && resultString.length() > 0) {

JSONObject jsonobject = new JSONObject(resultString);

JSONArray jsonArray = new JSONArray(jsonobject.get("Placemark").toString());

resultString = "";

for (int i = 0; i < jsonArray.length(); i++) {

resultString = jsonArray.getJSONObject(i).getString("address");

}

}

} catch (Exception e) {

throw new Exception("获取物理位置出现错误:" + e.getMessage());

} finally {

get.abort();

client = null;

}

return resultString;

}

/**

* 判断网络是否可用

* @param context

* @return

*/

public static boolean isNetworkAvaliable(Context context){

ConnectivityManager manager = (ConnectivityManager) (context

.getSystemService(Context.CONNECTIVITY_SERVICE));

NetworkInfo networkinfo = manager.getActiveNetworkInfo();

return !(networkinfo == null || !networkinfo.isAvailable());

}

/**

* 判断网络类型 wifi 3G

*

* @param context

* @return

*/

public static boolean isWifiNetwrokType(Context context) {

ConnectivityManager connectivityManager = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo info = connectivityManager.getActiveNetworkInfo();

if (info != null && info.isAvailable()) {

if (info.getTypeName().equalsIgnoreCase("wifi")) {

return true;

}

}

return false;

}

}

在MainActivity中根据当前网络环境,决定用WIFI定位还是基站定位

import com.demo.location.cell.CellLocationManager;

import com.demo.location.wifi.WifiLocationManager;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private TextView mTextView;

private Button mButton;

private WifiLocationManager wifiLocation;

private CellLocationManager cellLocation;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTextView = (TextView) findViewById(R.id.tv_show_info);

mButton = (Button) findViewById(R.id.btn_get_info);

wifiLocation = new WifiLocationManager(MainActivity.this);

cellLocation = new CellLocationManager(MainActivity.this);

mButton.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

Util.logi("MainActivity: on mButton Click!!!");

getLocation();

}

});

}

private void getLocation(){

boolean isNet = Util.isNetworkAvaliable(MainActivity.this);

if(!isNet){

Toast.makeText(MainActivity.this, "网络不可用:打开WIFI 或 数据连接!!!", Toast.LENGTH_LONG).show();

Util.logd("MainActivity: getLocation: Net work is not avaliable, and return!!!");

return;

}

boolean isWifi = Util.isWifiNetwrokType(MainActivity.this);

if(isWifi){

Util.logd("MainActivity: getLocation: Wifi定位");

wifiLocation.getLocation(new WifiReceiver());

}else{

Util.logd("MainActivity: getLocation: 基站定位");

String location = cellLocation.getLocationCell();

mTextView.setText(location);

}

}

class WifiReceiver extends BroadcastReceiver {

public void onReceive(Context c, Intent intent) {

Util.logi("get broadcastReceiver: SCAN_RESULTS_AVAILABLE_ACTION");

String location = wifiLocation.getLocationWifi();

mTextView.setText(location);

}

}

}

1. WIFI定位:

android 定位服务和wifi,android WIFI定位和基站定位实现相关推荐

  1. 使用百度API实现热点(WIFI)、GPS、基站定位

    直接上代码...嘎嘎 /*** 百度基站定位错误返回码*/ // 61 : GPS定位结果 // 62 : 扫描整合定位依据失败.此时定位结果无效. // 63 : 网络异常,没有成功向服务器发起请求 ...

  2. android wifi定位服务,如何在Android中使用Wifi获取位置?

    我希望通过Wifi获取位置并在谷歌地图中工作,这对我不起作用,但Gps没问题,也没问题. 我的代码: locationManager = (LocationManager) getSystemServ ...

  3. 腾讯定位服务使用教程Android版

    开发环境: android studio 目录 一:准备环境 二:编码部分 三:百度和腾讯的对比 一:准备环境 1.首先你得有一个腾讯开发账号 传送门:https://lbs.qq.com?lbs_i ...

  4. android 定位服务源码,android gps定位app源码(GpsTracker)

    [实例简介]做到了 gps 开启关闭后的提醒 以及地理位置记录(经纬度) [实例截图] [核心代码] package android.gpstracker; import android.app.Ac ...

  5. android调服务不更新,android – OnUpdate()不调用小部件服务

    我正在为我的应用程序开发一个小部件.窗口小部件名称是历史记录,当用户浏览任何URL时,我将其存储在本地数据库中,从中列出该窗口小部件. 当我打开小部件时,它从本地数据库中获取所有细节并在小部件的列表视 ...

  6. android 辅助服务 简书,Android AccessibilityService使用

    测试demo主要使用了Android 的无障碍辅助服务(AccessibilityService),主要注意是 1. 开启服务,绑定目标app的监听(demo中根据包命绑定了体积计算的app),需要在 ...

  7. android必须服务,说说在Android如何使用服务(Service)的方法

    Android 服务(Service)适合执行那些不需要和用户交互而且还要求长期运行的任务. 服务的运行不依赖于任何用户界面,即使 APP 被切换到后台,或者打开了另外一个 APP,服务仍然能够保持正 ...

  8. android同步服务启动失败,android – FirebaseCloudMessaging:FirebaseInstanceId后台同步失败 – SERVICE_NOT_AVAILABLE...

    我已在Android中使用Firebase云消息传递(FCM)API进行推送通知.当我实现那个时间完美的工作,但现在它找不到谷歌播放的服务. 错误是: FirebaseInstanceId: back ...

  9. android中服务播放音乐,android中用Service播放音乐

    一般的Android应用程序的音乐可以分为背景音乐和点击各种控件时的音效,前者一般为比较大的音乐文件,后者一般为比较小的音乐.在Android中一般用MediaPlayer类处理比较大的音频文件,用S ...

  10. android 判断服务是否活动,Android:我如何获得当前的前台活动(从服务)?

    这里有一个使用活动管理器的好方法.您基本上可以从活动经理那里得到runningTask.它将始终首先返回当前活动的任务.从那里你可以得到topActivity. 有一种从ActivityManager ...

最新文章

  1. Openresty中使用LuaJit
  2. 第十四章:springboot 定时任务
  3. looper message handler之间的关系
  4. codeforces contest 1119
  5. leetcode jump game ii
  6. 虚拟机里面安装Openfiler 2.99
  7. python函数变量的作用域_学不会的Python函数——变量作用域
  8. 防止表格中的单行按钮被频繁点击,前端实例讲解~
  9. 每日学习笔记(17)
  10. matlab编程椅子放平问题,数学模型程序代码Matlab-姜启源-第一章-建立数学模型.docx...
  11. python如何编辑pdf_用Python实现一款永久免费的PDF编辑工具
  12. itext7 java转pdf添加图片
  13. JAVA程序练习---小车行走距离
  14. 蓝桥杯 ADV-222 7-2求arccos值
  15. 请写出至少五个块级元素_以下属于行内块元素的是()
  16. Python:利用matplotlib库绘制统计图(饼图、直方图、散点图、极坐标图和网格图)
  17. 2021-09-21
  18. 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪
  19. C++ 关键字 typeid, typename
  20. 富文本生成pdf-java

热门文章

  1. 运动设施管理系统er图
  2. postman测试Map参数、List接口
  3. LTE 测试文档(翻译)
  4. 电脑测试软件删了如何恢复了,如何把已经删掉的文件快速恢复过来
  5. Sketch Essential Training: The Basics Sketch基本训练:基础知识 Lynda课程中文字幕
  6. 西门子PLC300系列上载密码,程序块密码,支持博图,step7软件解读,操作简单
  7. 月销涨3倍:阿里巴巴零售通联合饿了么宣布将赋能近万天猫小店
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园花卉销售系统ef5ox
  9. 最新微信ipad协议, CODE获取 公众号授权等
  10. 关于this引用逸出的理解