这篇教程主要介绍了在Android平台上如何使用服务完成定位功能。众所周知,Android设备的当前位置信息,对开发创新性App、解决人们日常生活问题有极大帮助。在Android平台开发定位相关的应用程序,需要位置提供者。有两种类型的位置提供者:

GPS定位

网络定位

以上两种类型,任何一种都可以获得用户或者用户设备的位置信息。但是,它们各有优劣,推荐两者同时使用。GPS 定位,在室内反应迟缓,比较耗时;网络定位,在没有网络的时候无法获得位置信息。

GPS定位 VS 网络定位

获取位置坐标时,网络定位比GPS定位稍快。

GPS在室内定位非常缓慢,并且比较耗电。

网络定位依赖蜂窝网络,获取的是最近的网络基站的位置。

GPS定位数据相对精确,得到我们当前的位置信息。

获取定位数据

在Manifest文件中授权,接收定位数据。

创建LocationManager实例,将其指向定位服务。

LocationManager请求定位数据。

定数数据改变时,LocationListener接收更新的定位数据。

授权接收定位更新数据

在Manifest文件中获取如下权限,然后可以通过定位提供者获得定位数据:

定位提供者必需要有INTERNET权限和ACCESS_FINE_LOCATION权限。同时,网络定位还需要ACCESS_COARSE _LOCATION权限。

创建LocationManager实例,指向定位服务

无论何种类型的Android后台Service,需要获得其引用才能使用。同样,通过getSystemService()方法获得定位服务的引用,然后将这个引用将添加到新创建的LocationManager实例中,示例如下:

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

从LocationManager请求当前位置

穿件位置服务引用后,通过LocationManager的requestLocationUpdates()方法可以请求位置更新信息。调用方法时,需要位置提供者、最后一次更新距今的时间(秒)、距离和LocationListener对象。调用后LocationListener对象会根据位置进行更新。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

通过LocationListener,获得更新位置数据

根据指定的距离或时间间隔,LocationListener会收到更新通知。

示例:获取当前位置

这个示例通过GPS定位获取当前位置数据。主要代码如下:

package com.javapapers.android.geolocationfinder;

import android.os.Bundle;

import android.app.Activity;

import android.content.Context;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.widget.TextView;

import android.util.Log;

public class MainActivity extends Activity implements LocationListener {

protected LocationManager locationManager;

protected LocationListener locationListener;

protected Context context;

TextView txtLat;

String lat;

String provider;

protected String latitude, longitude;

protected boolean gps_enabled, network_enabled;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

txtLat = (TextView) findViewById(R.id.textview1);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,

0, this);

}

@Override

public void onLocationChanged(Location location) {

txtLat = (TextView) findViewById(R.id.textview1);

txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:"

+ location.getLongitude());

}

@Override

public void onProviderDisabled(String provider) {

Log.d("Latitude", "disable");

}

@Override

public void onProviderEnabled(String provider) {

Log.d("Latitude", "enable");

}

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

Log.d("Latitude", "status");

}

}

布局文件如下,

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

android:id="@+id/textview1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:text="@string/hello_world" />

Manifest文件如下,

package="com.javapapers.android.geolocationfinder"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="17" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppBaseTheme" >

android:name="com.javapapers.android.geolocationfinder.MainActivity"

android:label="@string/app_name" >

输出效果

提示:如果使用模拟器运行这个示例,需要将准确的经纬度发送到模拟器。

如何发送经纬度到模拟器

打开Eclipse中 DDMS 视图(Window>Open Perspective)

选择模拟器

选择模拟器控制选项

在位置控制面板,选择手动输入,添加经纬度数据,点击“发送”

android自动获取位置,Android中获取当前位置信息相关推荐

  1. JAVA核心知识点--HttpClient获取302响应中的Location头信息

    HttpClient获取302响应中的Location头信息 public static String getLocationUrl(String url) {RequestConfig config ...

  2. Android 从清单配置文件元数据中获取值

    最近在上班工作当中,也尝到了一些新的知识,现总结如下 (1)从AndroidManifest.xml配置文件中获取meta数据 // 从Manifest.xml配置文件中获取数据public stat ...

  3. android 常用机型尺寸_Android中获取手机屏幕大小的方法

    本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...

  4. android 自动 键盘,关于Android中的软键盘

    InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系 ...

  5. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解

    先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...

  6. android自动创建快捷方式,Android开发之生成桌面快捷方式细则(原创)

    本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 申明,标题里的快捷方式不是指开发人员使用频率极高的Ctrl+C和Ctrl+V:也不是IDE里Ctrl+D.Ctrl+F等常用快捷键.这 ...

  7. android自动夜间模式,Android实现日夜间模式的深入理解

    在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...

  8. Android 自动搜索频道,Android自定义收音机搜台控件RadioRulerView

    前言:像这类的自定义控件有非常多的开源项目,但还是没有找到我项目想要的,所以简单实现了一个,下面简单讲讲实现原理. 效果图: 实现思路: 首先画固定背景尺子,而实现这个则要计算刻度线的宽度.刻度线间的 ...

  9. android 自动挂断,android 来电自动接听和自动挂断(2.3以上)

    转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...

  10. android 自动静音模式,Android实现定时自动静音小助手

    定时静音助手的实现方法,供大家参考,具体内容如下 背景 突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手.工作.学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感, ...

最新文章

  1. 【理论】红黑树的实现原理
  2. oracle sga pga mysql_Oracle 体系结构 SGA 和PGA 总结
  3. 使用docker安装部署Spark集群来训练CNN(含Python实例)
  4. VTK:可视化之FastSplatter
  5. 用框架的你,可能早已忽略了这些事件API
  6. Java 进阶——自动装箱和自动拆箱
  7. 干货-iOS、mac开源项目及库,以后我也会持续更新。
  8. 晶振两端的谐振电容有特殊要求吗_“吃瓜群众”也能秒懂的晶振电路原理
  9. wordpress发布文章错误:此响应不是合法的JSON响应
  10. 《代码大全2》读书笔记 Week9
  11. HZRecorder+科大讯飞语音转换文字
  12. 数据分析必备算法(算数平均值,加权平均值,最值,中位数,标准差,时间数据处理 ,数组的轴向汇总, 移动均线 ,卷积(简单概念))
  13. 查看hadoop版本
  14. 运放 - 输出阻抗(Open loop output resistance)Ro
  15. 我心中接地气的大数据【前言】
  16. git deamon 一个简单的git服务器
  17. learning bamboo flute
  18. 通信原理与MATLAB(三):SSB的调制解调
  19. list(map(tokenizer.tokenize, text))
  20. 计算机加密技术图片,基于Henon映射的图像加密技术

热门文章

  1. 项目启动报错: This is very likely to create a memory leak. Stack trace of thread 解决方案
  2. 开源中国 2018 新增开源软件最受欢迎 TOP 50
  3. Xposed模块开发入门,实现修改微信钱包显示的余额
  4. 视觉生理学基础(人眼结构)
  5. 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squi...
  6. Glyphicon 字体图标
  7. 坐标系统投影变换分带方法
  8. java截取split_Java使用split截取字符串过程解析
  9. pythonsplit怎么使用_如何在Python中使用Split命令?
  10. 详解 图像旋转变换 原理