安卓手机如何更改手机地理位置地理位置?

后使用快捷导航没有帐号?
查看: 39702|回复: 2
更改手机地理位置的软件
该用户从未签到
资源名称:天下游资源大小:6.02M
资源版本:v8.5
资源语言:中文
支持系统:安卓4.0上苹果.0以上
GPS位置模拟/伪装器& & 安全,防屏蔽!
1.完美更改陌陌,微信、QQ等地理位置,超越任何同类产品。
2.支持多点定位——将手机上不同的应用设定在不同的地点。
3.应用场景:如您在北京,想结交上海地区的朋友,使用本工具可以简单快速定位到指定区域,微信,陌陌,QQ附近的人随之发生改变,没有国界,也可定位在国外!
4.更改手机位置无需打开手机开发者选项——允许模拟位置。使用教程
1、 从官网下载并安装
图片1.jpg (26.14 KB, 下载次数: 61)
15:14 上传
进入软件、选择要定位的位置
图片2.jpg (54.11 KB, 下载次数: 51)
15:14 上传
图片3.jpg (37.02 KB, 下载次数: 56)
15:14 上传
该用户从未签到
该用户从未签到
Powered by有没有一种软件可以改变手机的地理位置啊??
求大家介绍……
上UC,有快感!
该帖共收到 5 条回复!
发表于 日 14:47
有的啊。。向楼主推荐一个改变自己微信,陌陌,QQ,的地理位置,天下游~挺好用的,个人意志在用,你可以试试~
这个应用没听说过
上UC,有快感!
发表于 日 16:59
来自不明物体
使用xposed框架安装插件,可以伪装
上UC,有快感!
发表于 日 08:52
Xposed框架下插件一大把。xprivacy
加分鼓励下,谢谢您的支持哦。
上UC,有快感!
发表于 日 10:22
来自 ZX6688
360卫士极客版可以。打开360极客版,点击防隐私泄露,再击隐私易容术,就有伪装地理位置的功能选项。
加分鼓励下,谢谢您的支持哦。
上UC,有快感!
发表于 日 11:47
上UC,有快感!定位手机位置怎么操作?怎么定位别人手机?_安卓教程_好卓网
定位手机位置怎么操作?怎么定位别人手机?
  定位手机位置怎么操作?怎么定位别人手机?自从有了手机定位这个设置之后,很多用户都想给自己的亲人设置一下,现在我们就一起来看看,定位手机位置的距离操作流程吧。
  工具/原料
  百度云工具
  icloud
  安卓手机方案
  1、首先需要在跟踪的手机上安装百度云的&手机找回APP&。
  (下载安装方法自己百度搜索,用安卓手机的都会很简单,市场也能搜到)
  2、安装后你就可以在电脑端监视受控端的一些动向了!
  (电脑端就是百度云的网页,它能看到你绑定的安卓手机的列表,你只需要找到那个需要跟踪的手机就好了。)
  3、在百度云首页进入&手机找回&,点击&定位手机&大约过了10秒,手机便在地图上显示出来,竟然连街道门牌号都标注的清清楚楚。
  4、它还可以给被跟踪的手机自动拍照,这样你能更准确的知道位置了。(这一招听阴险的&&嘿嘿)
  5、如果你跟踪的对象发现了,想换卡,嘿嘿,不成!它会自动更新更换的手机号。
  (这个就主要防治那些万恶的小偷了)
  苹果手机方案
  1、首先在设置里找到icloud选项,在这个栏目里打开手机定位功能,如图。
  (小前提就是你得知道他的苹果ID和密码哦,偷偷的把ta手机这个功能开启后神不知鬼不觉的放回去)
  2、然后等你想看看这小子干嘛呢,在哪呢的时候(当然也可能是你女友的,你要是个男的你够BT的&&)只需要打开电脑的非IE浏览器,打开icloud的官方网站,输入ID和密码进入该手机的云端的PC平台端,如图。
  3、点击手机定位,等一会儿ta就会出现苹果地图上,这是一个大概位置,你能大体知道ta的位置,如果需要更直观一些你可以打开卫星图,如图。我在图中画出了我实际位置和地图探测到的位置,大体上还是能找到ta的。
  (比如ta要说在公司开会,可是地图显示的是在如家附近&&你懂得。)
  至于定位手机位置的作用嘛,除了保证老人孩子的安全之外,还是有很多的用处的,这个小编就不和大家多说了,看个人的需要吧。
分享到其他平台:
作为MIUI系统最新版的MIUI7一直备受米粉的关注,今天小米的官方微博放出了MIUI7稳定版更新公告,将在10月27日开放MIUI7稳定版升级,不过并不是所有机型都支持MIUI7稳定版,下面就来看看
在10月21日的魅蓝新品发布会上,魅族新机魅蓝metal正式与大家见面,魅蓝metal16G版本售价1099,32G版本售价1299,现已在各个渠道开启预售,将于11月2日正式发售,11月11日开始现货销售。
用读卡器读不出内存卡的原因有多种,这里我们需要用排除法来一一排除,在内存卡和电脑的连接中有内存卡、读卡器、USB接口、以及电脑本身4个对象可能出错,下面就从最简单的开始
怎么把下载的歌曲放到手机内存卡中?这个有两种方法,一种是用手机管理软件把手机和电脑相连,然后传送歌曲,还有一种是把手机作为普通存储器连接电脑,直接把歌曲拷贝到指定的
一、ROM 特色 1. 应群机友的建议和帮助,保持官方原貌下增添部分实用APP编译,精致精简714M、【如果喜欢长期使用又简单的机油可以尝试下】 2. 官方10.5.A.0.233最终版本内核基带 3. 增加
一、ROM 特色 1. 移植Z3的有声照片 2. 移植Z3的的AR趣拍 3. 移植Z3的动态镜头 4. 移植Z3的最新相册 5. 移植Z3的超逼真 6. 移植Z3的XReality 7. 移植Z3的媒体声音 8. 移植Z3的主题和壁纸 9. 移植Z3的
装机必备软件
装机必备游戏3254人阅读
android开发技巧收集(107)
在Android操作系统下,基站定位其实很简单,先说一下实现流程:
调用SDK中的API(TelephonyManager)获得MCC、MNC、LAC、CID等信息,然后通过google的API获得所在位置的经纬度,最后再通过google map的API获得实际的地理位置。(google真牛!)
有同学会问:MNC、MCC、LAC、CID都是些什么东西?google又怎么通过这些东西就获得经纬度了呢?
我们一起来学习一下:
MCC,Mobile Country Code,移动国家代码(中国的为460);
MNC,Mobile Network Code,移动网络号码(中国移动为00,中国联通为01);
LAC,Location Area Code,位置区域码;
CID,Cell Identity,基站编号,是个16位的数据(范围是0到65535)。
了解了这几个名词的意思,相信有些朋友已经知道后面的事了:google存储了这些信息,直接查询就能得到经纬度了。(至于google怎么得到移动、联通的基站信息,这就不得而知了,反正google免费提供接口,直接调用就是)
下面开始动手。
一、设置界面
我们在上一节的程序的基础上进行开发,在DemoActivity的界面上实现这个功能。(没有代码的同学可,感谢同学的建议,以后我会在每一节的最后把例子打包提供下载)
首先我们将DemoActivity使用的布局修改一下:
第1行为TextView,显示提示文字;第2行为一个Button,触发事件;第3行、第4行分别显示基站信息和地理位置(现在为空,看不到)。
layout/main.xml文件内容如下:
version=&1.0& encoding=&utf-8&?&
&LinearLayout
xmlns:android=&&
&&&&android:layout_width=&fill_parent&
&&&&android:layout_height=&fill_parent&
&&&&android:orientation=&vertical& &
&&&&&TextView
&&&&&&&&android:layout_width=&fill_parent&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:text=&Please click the button below to get your location& /&
&&&&&Button
&&&&&&&&android:id=&@+id/button1&
&&&&&&&&android:layout_width=&wrap_content&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:text=&Click Me& /&
&&&&&TextView
&&&&&&&&android:id=&@+id/cellText&
&&&&&&&&android:layout_width=&wrap_content&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:text=&& /&
&&&&&TextView
&&&&&&&&android:id=&@+id/lacationText&
&&&&&&&&android:layout_width=&wrap_content&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:text=&& /&
&/LinearLayout&
接下来我们打开DemoActivity.java编写代码。
二、为按钮绑定事件
我们在Activity创建时绑定事件,将以下代码添加到setContentView(R.layout.main);后:
/** 为按钮绑定事件 */
Button btnGetLocation = (Button)findViewById(R.id.button1);
btnGetLocation.setOnClickListener(new
OnClickListener() {
&&&&@Override
&&&&public
void onClick(View arg0) {
&&&&&&&&onBtnClick();
同时还需要在头部import相关组件:
android.view.V
android.widget.B
android.view.View.OnClickL
我们来分析一下这段代码:
首先我们通过findViewById(R.id.button1)找到按钮这个对象,前面加(Button)表示显示的转换为Button对象;
然后设置按钮点击事件的监听器,参数为OnClickListener对象,再重载这个类的onClick方法,调用onBtnClick方法(这个方法得由我们自己去写,他在点击按钮时被调用)。
好了,调用方法写好了,我们来写实现(调用后需要做什么事)。动手编码之前先在脑中整理好思路,养成好习惯。
我们需要在DemoActivty类中添加如下私有方法:
我们需要刚刚提到的onBtnClick回调方法,被调用时实现取得基站信息、获取经纬度、获取地理位置、显示的功能。但是很显然,全部揉到一个方法里面并不是个好主意,我们将它分割为几个方法;
添加获取基站信息的方法getCellInfo,返回基站信息;
添加获取经纬度的方法getItude,传入基站信息,返回经纬度;
添加获取地理位置的方法getLocation,传入经纬度,返回地理位置;
添加显示结果的方法showResult,传入得到的信息在界面上显示出来。
好了,先将方法添上,完整代码如下:
com.android.
android.R.
android.R.
android.app.A
android.os.B
android.view.V
android.widget.B
android.view.View.OnClickL
class DemoActivity extends
Activity {
&&&&/** Called when the activity is first created. */
&&&&@Override
&&&&public
void onCreate(Bundle savedInstanceState) {
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.main);
&&&&&&&&&&
&&&&&&&&/** 为按钮绑定事件 */
&&&&&&&&Button btnGetLocation = (Button)findViewById(R.id.button1);
&&&&&&&&btnGetLocation.setOnClickListener(new
OnClickListener() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public
void onClick(View arg0) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&onBtnClick();
&&&&&&&&&&&&}
&&&&&&&&});
&&&&/** 基站信息结构体 */
&&&&public
class SCell{
&&&&&&&&public
&&&&&&&&public
&&&&&&&&public
&&&&&&&&public
&&&&/** 经纬度信息结构体 */
&&&&public
class SItude{
&&&&&&&&public
&&&&&&&&public
&&&&/** 按钮点击回调函数 */
&&&&private
void onBtnClick(){
&&&&&&&&&&
&&&&/** 获取基站信息 */
&&&&private
SCell getCellInfo(){
&&&&/** 获取经纬度 */
&&&&private
SItude getItude(SCell cell){
&&&&&&&&&&
&&&&/** 获取地理位置 */
&&&&private
String getLocation(SItude itude){
&&&&&&&&&&
&&&&/** 显示结果 */
&&&&private
void showResult(SCell cell, String location){
&&&&&&&&&&
现在在onBtnClick方法中编码,依次调用后面几个方法,代码如下:
/** 按钮点击回调函数 */
void onBtnClick(){
&&&&/** 弹出一个等待状态的框 */
&&&&ProgressDialog mProgressDialog =
new ProgressDialog(this);
&&&&mProgressDialog.setMessage(&正在获取中...&);
&&&&mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
&&&&mProgressDialog.show();
&&&&&&&&/** 获取基站数据 */
&&&&&&&&SCell cell = getCellInfo();
&&&&&&&&&&
&&&&&&&&/** 根据基站数据获取经纬度 */
&&&&&&&&SItude itude = getItude(cell);
&&&&&&&&&&
&&&&&&&&/** 获取地理位置 */
&&&&&&&&String location = getLocation(itude);
&&&&&&&&&&
&&&&&&&&/** 显示结果 */
&&&&&&&&showResult(cell, location);
&&&&&&&&&&
&&&&&&&&/** 关闭对话框 */
&&&&&&&&mProgressDialog.dismiss();
&&&&}catch
(Exception e) {
&&&&&&&&/** 关闭对话框 */
&&&&&&&&mProgressDialog.dismiss();
&&&&&&&&/** 显示错误 */
&&&&&&&&TextView cellText = (TextView)findViewById(R.id.cellText);
&&&&&&&&cellText.setText(e.getMessage());
按钮相关的工作就完成了,接下来编写获取基站信息的方法。
三、获取基站信息
获取基站信息我们需要调用SDK提供的API中的TelephonyManager,需要在文件头部引入:
android.telephony.TelephonyM
android.telephony.gsm.GsmCellL
完整代码为:
&* 获取基站信息
&* @throws Exception
SCell getCellInfo() throws
Exception {
&&&&SCell cell =
new SCell();
&&&&/** 调用API获取基站信息 */
&&&&TelephonyManager mTelNet = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
&&&&GsmCellLocation location = (GsmCellLocation) mTelNet.getCellLocation();
(location == null)
&&&&&&&&throw
new Exception(&获取基站信息失败&);
&&&&String operator = mTelNet.getNetworkOperator();
mcc = Integer.parseInt(operator.substring(0,
mnc = Integer.parseInt(operator.substring(3));
cid = location.getCid();
lac = location.getLac();
&&&&/** 将获得的数据放到结构体中 */
&&&&cell.MCC =
&&&&cell.MNC =
&&&&cell.LAC =
&&&&cell.CID =
&&&&return
如果获得的位置信息为null将抛出错误,不再继续执行。最后将获取的基站信息封装为结构体返回。
四、获取经纬度
在这一步,我们需要采用HTTP调用google的API以获取基站所在的经纬度。
Android作为一款互联网手机,联网的功能必不可少。Android提供了多个接口供我们使用,这里我们使用DefaultHttpClient。
完整的方法代码如下:
&* 获取经纬度
&* @throws Exception
SItude getItude(SCell cell) throws
Exception {
&&&&SItude itude =
new SItude();
&&&&/** 采用Android默认的HttpClient */
&&&&HttpClient client =
new DefaultHttpClient();
&&&&/** 采用POST方法 */
&&&&HttpPost post =
new HttpPost(&&);
&&&&&&&&/** 构造POST的JSON数据 */
&&&&&&&&JSONObject holder =
new JSONObject();
&&&&&&&&holder.put(&version&,
&&&&&&&&holder.put(&host&,
&&&&&&&&holder.put(&address_language&,
&&&&&&&&holder.put(&request_address&,
&&&&&&&&holder.put(&radio_type&,
&&&&&&&&holder.put(&carrier&,
&&&&&&&&JSONObject tower =
new JSONObject();
&&&&&&&&tower.put(&mobile_country_code&, cell.MCC);
&&&&&&&&tower.put(&mobile_network_code&, cell.MNC);
&&&&&&&&tower.put(&cell_id&, cell.CID);
&&&&&&&&tower.put(&location_area_code&, cell.LAC);
&&&&&&&&JSONArray towerarray =
new JSONArray();
&&&&&&&&towerarray.put(tower);
&&&&&&&&holder.put(&cell_towers&, towerarray);
&&&&&&&&StringEntity query =
new StringEntity(holder.toString());
&&&&&&&&post.setEntity(query);
&&&&&&&&/** 发出POST数据并获取返回数据 */
&&&&&&&&HttpResponse response = client.execute(post);
&&&&&&&&HttpEntity entity = response.getEntity();
&&&&&&&&BufferedReader buffReader =
new BufferedReader(new
InputStreamReader(entity.getContent()));
&&&&&&&&StringBuffer strBuff =
new StringBuffer();
&&&&&&&&String result =
&&&&&&&&while
((result = buffReader.readLine()) != null) {
&&&&&&&&&&&&strBuff.append(result);
&&&&&&&&/** 解析返回的JSON数据获得经纬度 */
&&&&&&&&JSONObject json =
new JSONObject(strBuff.toString());
&&&&&&&&JSONObject subjosn =
new JSONObject(json.getString(&location&));
&&&&&&&&itude.latitude = subjosn.getString(&latitude&);
&&&&&&&&itude.longitude = subjosn.getString(&longitude&);
&&&&&&&&&&
&&&&&&&&Log.i(&Itude&, itude.latitude + itude.longitude);
&&&&&&&&&&
catch (Exception e) {
&&&&&&&&Log.e(e.getMessage(), e.toString());
&&&&&&&&throw
new Exception(&获取经纬度出现错误:&+e.getMessage());
&&&&&&&&post.abort();
&&&&&&&&client =
&&&&return
代笔中关键的地方都作了注释,同学们还有不理解的举手哈。
在这里采用POST方法将JSON数据发送到googleAPI,google返回JSON数据,我们得到数据后解析,得到经纬度信息。
关于google 基站信息API的官方说明。
五、获取物理位置
得到经纬度后,我们将之转换为物理地址。
我们仍然使用DefaultHttpClient来调用google地图的API,获得物理信息,不过在这里我们使用GET方法。
完整的方法代码如下:
&* 获取地理位置
&* @throws Exception
String getLocation(SItude itude) throws
Exception {
&&&&String resultString =
&&&&/** 这里采用get方法,直接将参数加到URL上 */
&&&&String urlString = String.format(&,%s&,
itude.latitude, itude.longitude);
&&&&Log.i(&URL&, urlString);
&&&&/** 新建HttpClient */
&&&&HttpClient client =
new DefaultHttpClient();
&&&&/** 采用GET方法 */
&&&&HttpGet get =
new HttpGet(urlString);
&&&&&&&&/** 发起GET请求并获得返回数据 */
&&&&&&&&HttpResponse response = client.execute(get);
&&&&&&&&HttpEntity entity = response.getEntity();
&&&&&&&&BufferedReader buffReader =
new BufferedReader(new
InputStreamReader(entity.getContent()));
&&&&&&&&StringBuffer strBuff =
new StringBuffer();
&&&&&&&&String result =
&&&&&&&&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
i = 0; i & jsonArray.length(); i++) {
&&&&&&&&&&&&&&&&resultString = jsonArray.getJSONObject(i).getString(&address&);
&&&&&&&&&&&&}
catch (Exception e) {
&&&&&&&&throw
new Exception(&获取物理位置出现错误:&
+ e.getMessage());
&&&&&&&&get.abort();
&&&&&&&&client =
&&&&return
GET方法就比POST方法简单多了,得到的数据同样为JSON格式,解析一下得到物理地址。
六、显示结果
好了,我们已经得到我们想要的信息了,我们把它显示出来,方法代码如下:
/** 显示结果 */
void showResult(SCell cell, String location) {
&&&&TextView cellText = (TextView) findViewById(R.id.cellText);
&&&&cellText.setText(String.format(&基站信息:mcc:%d, mnc:%d, lac:%d, cid:%d&,
&&&&&&&&&&&&cell.MCC, cell.MNC, cell.LAC, cell.CID));
&&&&TextView locationText = (TextView) findViewById(R.id.lacationText);
&&&&locationText.setText(&物理位置:&
+ location);
七、运行程序
我们的编码工作已经完成了。在上面的代码中有些地方需要的引入代码没有提到,下面把完整的代码贴出来:
com.android.
java.io.BufferedR
java.io.InputStreamR
org.apache.http.HttpE
org.apache.http.HttpR
org.apache.http.client.HttpC
org.apache.http.client.methods.HttpG
org.apache.http.client.methods.HttpP
org.apache.http.entity.StringE
org.apache.http.impl.client.DefaultHttpC
org.json.JSONA
org.json.JSONO
android.app.A
android.app.ProgressD
android.content.C
android.os.B
android.telephony.TelephonyM
android.telephony.gsm.GsmCellL
android.util.L
android.view.V
android.widget.B
android.widget.TextV
android.view.View.OnClickL
class DemoActivity extends
Activity {
&&&&/** Called when the activity is first created. */
&&&&@Override
&&&&public
void onCreate(Bundle savedInstanceState) {
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.main);
&&&&&&&&/** 为按钮绑定事件 */
&&&&&&&&Button btnGetLocation = (Button) findViewById(R.id.button1);
&&&&&&&&btnGetLocation.setOnClickListener(new
OnClickListener() {
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public
void onClick(View arg0) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&onBtnClick();
&&&&&&&&&&&&}
&&&&&&&&});
&&&&/** 基站信息结构体 */
&&&&public
class SCell{
&&&&&&&&public
&&&&&&&&public
&&&&&&&&public
&&&&&&&&public
&&&&/** 经纬度信息结构体 */
&&&&public
class SItude{
&&&&&&&&public
&&&&&&&&public
&&&&/** 按钮点击回调函数 */
&&&&private
void onBtnClick() {
&&&&&&&&/** 弹出一个等待状态的框 */
&&&&&&&&ProgressDialog mProgressDialog =
new ProgressDialog(this);
&&&&&&&&mProgressDialog.setMessage(&正在获取中...&);
&&&&&&&&mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
&&&&&&&&mProgressDialog.show();
&&&&&&&&try
&&&&&&&&&&&&/** 获取基站数据 */
&&&&&&&&&&&&SCell cell = getCellInfo();
&&&&&&&&&&&&/** 根据基站数据获取经纬度 */
&&&&&&&&&&&&SItude itude = getItude(cell);
&&&&&&&&&&&&/** 获取地理位置 */
&&&&&&&&&&&&String location = getLocation(itude);
&&&&&&&&&&&&/** 显示结果 */
&&&&&&&&&&&&showResult(cell, location);
&&&&&&&&&&&&/** 关闭对话框 */
&&&&&&&&&&&&mProgressDialog.dismiss();
catch (Exception e) {
&&&&&&&&&&&&/** 关闭对话框 */
&&&&&&&&&&&&mProgressDialog.dismiss();
&&&&&&&&&&&&/** 显示错误 */
&&&&&&&&&&&&TextView cellText = (TextView) findViewById(R.id.cellText);
&&&&&&&&&&&&cellText.setText(e.getMessage());
&&&&&&&&&&&&Log.e(&Error&, e.getMessage());
&&&&&* 获取基站信息
&&&&&* @throws Exception
&&&&private
SCell getCellInfo() throws
Exception {
&&&&&&&&SCell cell =
new SCell();
&&&&&&&&/** 调用API获取基站信息 */
&&&&&&&&TelephonyManager mTelNet = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
&&&&&&&&GsmCellLocation location = (GsmCellLocation) mTelNet.getCellLocation();
&&&&&&&&if
(location == null)
&&&&&&&&&&&&throw
new Exception(&获取基站信息失败&);
&&&&&&&&String operator = mTelNet.getNetworkOperator();
&&&&&&&&int
mcc = Integer.parseInt(operator.substring(0,
&&&&&&&&int
mnc = Integer.parseInt(operator.substring(3));
&&&&&&&&int
cid = location.getCid();
&&&&&&&&int
lac = location.getLac();
&&&&&&&&/** 将获得的数据放到结构体中 */
&&&&&&&&cell.MCC =
&&&&&&&&cell.MNC =
&&&&&&&&cell.LAC =
&&&&&&&&cell.CID =
&&&&&&&&return
&&&&&* 获取经纬度
&&&&&* @throws Exception
&&&&private
SItude getItude(SCell cell) throws
Exception {
&&&&&&&&SItude itude =
new SItude();
&&&&&&&&/** 采用Android默认的HttpClient */
&&&&&&&&HttpClient client =
new DefaultHttpClient();
&&&&&&&&/** 采用POST方法 */
&&&&&&&&HttpPost post =
new HttpPost(&&);
&&&&&&&&try
&&&&&&&&&&&&/** 构造POST的JSON数据 */
&&&&&&&&&&&&JSONObject holder =
new JSONObject();
&&&&&&&&&&&&holder.put(&version&,
&&&&&&&&&&&&holder.put(&host&,
&&&&&&&&&&&&holder.put(&address_language&,
&&&&&&&&&&&&holder.put(&request_address&,
&&&&&&&&&&&&holder.put(&radio_type&,
&&&&&&&&&&&&holder.put(&carrier&,
&&&&&&&&&&&&JSONObject tower =
new JSONObject();
&&&&&&&&&&&&tower.put(&mobile_country_code&, cell.MCC);
&&&&&&&&&&&&tower.put(&mobile_network_code&, cell.MNC);
&&&&&&&&&&&&tower.put(&cell_id&, cell.CID);
&&&&&&&&&&&&tower.put(&location_area_code&, cell.LAC);
&&&&&&&&&&&&JSONArray towerarray =
new JSONArray();
&&&&&&&&&&&&towerarray.put(tower);
&&&&&&&&&&&&holder.put(&cell_towers&, towerarray);
&&&&&&&&&&&&StringEntity query =
new StringEntity(holder.toString());
&&&&&&&&&&&&post.setEntity(query);
&&&&&&&&&&&&/** 发出POST数据并获取返回数据 */
&&&&&&&&&&&&HttpResponse response = client.execute(post);
&&&&&&&&&&&&HttpEntity entity = response.getEntity();
&&&&&&&&&&&&BufferedReader buffReader =
new BufferedReader(new
InputStreamReader(entity.getContent()));
&&&&&&&&&&&&StringBuffer strBuff =
new StringBuffer();
&&&&&&&&&&&&String result =
&&&&&&&&&&&&while
((result = buffReader.readLine()) != null) {
&&&&&&&&&&&&&&&&strBuff.append(result);
&&&&&&&&&&&&}
&&&&&&&&&&&&/** 解析返回的JSON数据获得经纬度 */
&&&&&&&&&&&&JSONObject json =
new JSONObject(strBuff.toString());
&&&&&&&&&&&&JSONObject subjosn =
new JSONObject(json.getString(&location&));
&&&&&&&&&&&&itude.latitude = subjosn.getString(&latitude&);
&&&&&&&&&&&&itude.longitude = subjosn.getString(&longitude&);
&&&&&&&&&&&&&&
&&&&&&&&&&&&Log.i(&Itude&, itude.latitude + itude.longitude);
&&&&&&&&&&&&&&
catch (Exception e) {
&&&&&&&&&&&&Log.e(e.getMessage(), e.toString());
&&&&&&&&&&&&throw
new Exception(&获取经纬度出现错误:&+e.getMessage());
&&&&&&&&&&&&post.abort();
&&&&&&&&&&&&client =
&&&&&&&&&&
&&&&&&&&return
&&&&&* 获取地理位置
&&&&&* @throws Exception
&&&&private
String getLocation(SItude itude) throws
Exception {
&&&&&&&&String resultString =
&&&&&&&&/** 这里采用get方法,直接将参数加到URL上 */
&&&&&&&&String urlString = String.format(&,%s&,
itude.latitude, itude.longitude);
&&&&&&&&Log.i(&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 =
&&&&&&&&&&&&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
i = 0; i & jsonArray.length(); i++) {
&&&&&&&&&&&&&&&&&&&&resultString = jsonArray.getJSONObject(i).getString(&address&);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
catch (Exception e) {
&&&&&&&&&&&&throw
new Exception(&获取物理位置出现错误:&
+ e.getMessage());
&&&&&&&&&&&&get.abort();
&&&&&&&&&&&&client =
&&&&&&&&return
&&&&/** 显示结果 */
&&&&private
void showResult(SCell cell, String location) {
&&&&&&&&TextView cellText = (TextView) findViewById(R.id.cellText);
&&&&&&&&cellText.setText(String.format(&基站信息:mcc:%d, mnc:%d, lac:%d, cid:%d&,
&&&&&&&&&&&&&&&&cell.MCC, cell.MNC, cell.LAC, cell.CID));
&&&&&&&&TextView locationText = (TextView) findViewById(R.id.lacationText);
&&&&&&&&locationText.setText(&物理位置:&
+ location);
我们连上手机在手机上运行程序看看。
不出意外的话程序运行起来了,自动跳转到了主界面。点击“Click Me”,出错了!
详细的错误信息为:Neither user 10078 nor current
process has android.permission.ACCESS_COARSE_LOCATION.
原来是没有权限,经过前面的学习,我们知道Android在应用的安全上下了一番功夫,要用一些特殊功能必须先报告,安装应用的时候列给用户看,必须要得到用户的允许。这里我们用了获取基站信息的功能,涉及到用户的隐私了,所以我们必须申明一下。
打开AndroidManifest.xml配置文件,在里面添加相应的配置信息:
&uses-permission
android:name=&android.permission.ACCESS_FINE_LOCATION&&&/uses-permission&
我们继续把网络连接的权限申明也加上:
&uses-permission
android:name=&android.permission.INTERNET&&&/uses-permission&
再编译运行看看(点击“Click Me”后程序会卡住,等待一段时间才有反应,取决于网络情况):
可能有的同学还是出现错误,没有成功:
█&提示“…”什么的错误
请确认你的手机能访问互联网,调用google的API是必须联网的。
█&提示获取不到基站信息
你确定你是在手机上测试的吗?模拟器可不行哦。或者你的手机使用的CMDA网络?这个例子只支持GSM网络…
█&获取不到经纬度
很有可能你中奖了,你所在的基站还没纳入google的数据库…(话说我之前也遇到过,怎么查就是查不出经纬度来,返回数据为空)
█&获取到的地理地址不正确
这个可能程序出错了,可能google出错了?
其实google map API返回的数据中还包含了很多其他信息,我们可以用来开发一些更有趣的功能,如制作我们专属的地图软件、足迹记录软件等,充分发挥你的创造力:)
这个程序基本实现了基站定位功能,但还有很多问题,如:点击了按钮后界面会卡住(访问网络时阻塞了进程)、未对异常进一步处理、不兼容CMDA网络等。
另外这个程序的精度也不够,获得的位置实际上是基站的物理位置,与人所在的位置还有一定差距。在城市里面,一般采用密集型的小功率基站,精度一般在几百米范围内,而在郊区常为大功率基站,密度很小,精度一般在几千米以上。
想要取得更高的精度需要通过一些其他的算法来实现,如果大家有兴趣的话我们可以一起来研究一下,再专门写篇笔记。
可见写一段程序和做一个实际的产品是有很大差别的。
九、程序代码
这一节完整程序的。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:214870次
积分:2170
积分:2170
排名:第17465名
转载:235篇
评论:133条
(6)(2)(4)(13)(3)(12)(32)(10)(25)(39)(28)(19)(25)(18)

我要回帖

更多关于 如何更改手机地理位置 的文章

 

随机推荐