android自动获取位置,Android中获取当前位置信息
这篇教程主要介绍了在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中获取当前位置信息相关推荐
- JAVA核心知识点--HttpClient获取302响应中的Location头信息
HttpClient获取302响应中的Location头信息 public static String getLocationUrl(String url) {RequestConfig config ...
- Android 从清单配置文件元数据中获取值
最近在上班工作当中,也尝到了一些新的知识,现总结如下 (1)从AndroidManifest.xml配置文件中获取meta数据 // 从Manifest.xml配置文件中获取数据public stat ...
- android 常用机型尺寸_Android中获取手机屏幕大小的方法
本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...
- android 自动 键盘,关于Android中的软键盘
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系 ...
- android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...
- android自动创建快捷方式,Android开发之生成桌面快捷方式细则(原创)
本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 申明,标题里的快捷方式不是指开发人员使用频率极高的Ctrl+C和Ctrl+V:也不是IDE里Ctrl+D.Ctrl+F等常用快捷键.这 ...
- android自动夜间模式,Android实现日夜间模式的深入理解
在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...
- Android 自动搜索频道,Android自定义收音机搜台控件RadioRulerView
前言:像这类的自定义控件有非常多的开源项目,但还是没有找到我项目想要的,所以简单实现了一个,下面简单讲讲实现原理. 效果图: 实现思路: 首先画固定背景尺子,而实现这个则要计算刻度线的宽度.刻度线间的 ...
- android 自动挂断,android 来电自动接听和自动挂断(2.3以上)
转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...
- android 自动静音模式,Android实现定时自动静音小助手
定时静音助手的实现方法,供大家参考,具体内容如下 背景 突发奇想,刚好这学期刚上安卓课程,想设计一个时间助手.工作.学习中经常会被突如其来的电话所打扰,在上班,上课时这突如其来的铃声会惹来别人的反感, ...
最新文章
- 【理论】红黑树的实现原理
- oracle sga pga mysql_Oracle 体系结构 SGA 和PGA 总结
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
- VTK:可视化之FastSplatter
- 用框架的你,可能早已忽略了这些事件API
- Java 进阶——自动装箱和自动拆箱
- 干货-iOS、mac开源项目及库,以后我也会持续更新。
- 晶振两端的谐振电容有特殊要求吗_“吃瓜群众”也能秒懂的晶振电路原理
- wordpress发布文章错误:此响应不是合法的JSON响应
- 《代码大全2》读书笔记 Week9
- HZRecorder+科大讯飞语音转换文字
- 数据分析必备算法(算数平均值,加权平均值,最值,中位数,标准差,时间数据处理 ,数组的轴向汇总, 移动均线 ,卷积(简单概念))
- 查看hadoop版本
- 运放 - 输出阻抗(Open loop output resistance)Ro
- 我心中接地气的大数据【前言】
- git deamon 一个简单的git服务器
- learning bamboo flute
- 通信原理与MATLAB(三):SSB的调制解调
- list(map(tokenizer.tokenize, text))
- 计算机加密技术图片,基于Henon映射的图像加密技术
热门文章
- 项目启动报错: This is very likely to create a memory leak. Stack trace of thread 解决方案
- 开源中国 2018 新增开源软件最受欢迎 TOP 50
- Xposed模块开发入门,实现修改微信钱包显示的余额
- 视觉生理学基础(人眼结构)
- 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squi...
- Glyphicon 字体图标
- 坐标系统投影变换分带方法
- java截取split_Java使用split截取字符串过程解析
- pythonsplit怎么使用_如何在Python中使用Split命令?
- 详解 图像旋转变换 原理