如何获取某人的所在物理位置?andorid手机GPS、基站定位、JSON andorid ndk

要解决这个问题首先要满足的几个条件:

1、对方一定使用的是智能操作系统手机,比如:andorid、wm、iphone等等。

2、对方的手机上一定要有一个软件可以通过GSM/CDMA/GPS获取当前手机所在位置。该软件就是本文要介绍的。

这里本人用ANDROID2.1的系统举例,怎样构造一个获取对方物理位置信息的程序。

首先,需要搞清楚在手机上获取坐标的方法,通过最近一段时间的学习和总结,一共发现有三种方法:

1、如果手机上有GPS功能,并且一直开启,并且手机已经能够联系上4颗通讯卫星,那么可以使用GPS功能直接获取到坐标。

2、如果手机上没有GPS功能,那么通过无线基站的定位服务也可以获取到坐标。

3、如果基站不提供这种服务,我们可以通过手机获取其所在的物理位置区域编号,并使用google提供的Geolocation APINetwork Protocol来查询手机所在区域位置。

从准确性上将从方法1到3以此递减。其次要考虑的问题是通过什么方式获取对方手机信息,首先想到的是通过GPRS连接建立TCP/IP通信方式,但这种方式需要对方实时连接2G或3G网络,对于现在大多数人来说资费是个问题,不太可能实时的开启数据网络。另外一种方式就是通过短信方式,即,给对方手机发送一条特殊的短信,短信中携带一个特殊的标识,当对方手机收到这个标识时,启动定位程序,定位程序通过上述3种方式的其中一种获取位置信息,并再次通过短信方式将结果发回本端手机。

程序模型如下:

发送端手机 -----> 短信请求 -----> 接收端手机------> 对方手机处理短信并进行定位 ----->短信回复 -----> 发送端手机 ----->解析坐标数据并查地图软件显示

对方手机处理短信并进行定位,流程如下:

2.1 通过GPS定位,如果成功,则回复位置短消息,如果失败,则进入2.2

2.2通过无线基站定位,如果成功,则回复位置短消息,如果失败,则进入2.3

2.3 通过手机所在cell区域码,用json向google服务器请求定位

整个模型如图所示:




在andorid2.1上开发的几个重要步骤:

1、配置开发环境:http://www.hzlitai.com.cn/article/ARM11/SYSTEM/android.html

2、发送端只需要人为直接发送短信,暂时不需要开发。

3、接收端中的使用到的几个ANDROID API:

a>短信拦截和读取

b>gpsprovider坐标信息receiver的注册

c>networkprovider坐标信息receiver的注册

d>android.telephony.gsm.GsmCellLocation获取cell位置的方法

e>通过googleGeolocation API Network Protocol参考:http://code.google.com/intl/zh-CN/apis/gears/geolocation_network_protocol.html查询cell物理位置坐标方法

4、本端手机拿到坐标之后,查询google map得到地图位置。

为了实验的简单性,本人将第4步省略,直接使用短信中的坐标在PC上打开google map手工查询。

以下是实现代码实现中的一些设计说明:

1、LocateTest类,主程序入口,负责其他类实例的初始化和析构,是整个程序的驱动。

2、ReceiverDemo类,用于接收短消息,并解析定位标识,回送带有坐标信息的短信。来源:http://blog.csdn.net/duchunchao/archive/2010/12/23/6093776.aspx

3、MyLocationManager类,完成订阅GPS发来的位置信息、处理和保存,另外还完成基站提供的位置信息订阅、处理和保存。来源:http://veright.blog.163.com/blog/static/28345389201062211719890/

4、JsonLocation类,通过获取手机中保存的基站位置编号,通过发送json请求从google服务器获取位置信息。

实验效果:

由于本人的手机在房间里,GPS需要4颗卫星才能够定位,所以程序尝试第一次使用GPS定位会失败,然而不知道为什么移动的基站也不能正确提供定位信息,所以第二次尝试也失败了,最后一次使用手机所在的cell区域信息,发送了一个json请求给google服务器,获得了响应,这里本人使用了#w做为请求标识,手机收到之后回复了以下短信:

{"location":{"latitude":40.071562,"longitude":116.321943,"address":{"country":"China","country_code":"CN","region":"Beijing","city":"Beijing","street":"Longxi3rdSt"},"accuracy":594.0},"access_token":"2:GTwWburFjSG2tX9k:e9nVRO7o1by6-E9p"}

通过纬度40.071562和经度116.32194,查google地图,结果如下:


如何获取某人的所在物理位置?(andorid手机GPS、基站定位、JSON andorid ndk

本人是在红色圈地点做的实验,而这个经纬度在地图上标识的是绿色箭头位置,相距有500m左右(直线距离),看来通过基站区域定位无法精确定位到手机位置。

此程序有一个缺陷,就是在使用json定位时,直接使用的是gsm类获取cell位置信息,所以改程序暂不支持json方式查询CDMA手机位置。有兴趣的朋友可以完善一下。

程序改进点:通过上图可以发现,其实接收端在通过json进行定位时,对端手机还是需要通过GPRS网络访问google服务器,所以这对对端手机有能够上网的假设。而如果将cell编码直接传回本端手机,然后由本端手机向google服务器请求位置成功率将大大提高。不过这样就省不了在本端手机开发代码的问题。

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/323146.html

更多阅读

如何通过系统的训练提高自己? 篮球系统训练

如何通过系统的训练提高自己? 每一个人总有惰性,站着就想坐,坐着就想躺,躺下就睡着了。就是这个惰性,阻止着人在进步。所以,克服惰性,就要靠锻炼自己。而想要快速掌握交易技术,最好的方法,就是克服惰性,对自己进行操盘锻炼。 基本上,每周周末,或

怎样改变我的文档的默认保存位置? 精 win7我的文档默认路径

怎样改变我的文档的默认保存位置? 精——简介默认情况,Windows 7下我的文档被放置于用户文件夹下的一个公共文件夹,由于所在的分区为系统分区,所以当重装系统时,忘记备份文件,该分区的所有文件会随之被格式化掉。如此一来,该如何是好?其实我

家长如何接受孩子的第一次性生活? 家长不愿接受助学贷款

作为一名家长,这是一个最不愿意触及的话题,尤其是女孩的家长,该如何承受自己的女儿长大成人的第一次性生活。我不敢想,也不愿意想,总感觉顺其自然吧。到了一定的年龄发生一定的事情,这是“天要下雨娘要嫁人”所持的最好不过的态度。

如何提高企业的研发创新能力? 如何提高创新能力

如何提高企业的研发创新能力?企业的研发创新能力决定企业核心竞争力从联想到小米,从腾讯到阿里巴巴,从摩托罗拉到华为,从松下到诺基亚,从制造业到互联网,从新兴行业到传统行业,企业的研发创新能力是企业可持续发展的基石,没有研发创新能力

声明:《如何获取某人的所在物理位置?andorid手机GPS、基站定位、JSON andorid ndk》为网友感同身受分享!如侵犯到您的合法权益请联系我们删除