Android:位置服务
前言
在开发 Android 位置相关应用时,可以从 GPS(全球定位系统)、passive、network 获取用户位置。通过 GPS 能获得最精确的信息。
LocationProvider 是位置源的意思,用来提供定位信息。
常用的 LocationProvider
方法名 | 描述 |
---|---|
passive | 被动定位方式,即利用其他应用程序使用定位更新了定位信息,系统会保存下来,该应用接收到消息后直接读取即可 |
gps | 通过手机里面的 GPS 芯片利用卫星获取定位信息 |
network | 通过网络获取定位信息。通常利用手机基站和 WIFI节点的地址来大致定位 |
LocationManager:该类提供系统定位服务访问功能。
LocationManager 提供的常用的方法
方法名 | 描述 |
---|---|
list getAllProviders() | 获取所有的 LocationProvider 列表 |
Location getLastKnowLocation(String provider) | 根据 LocationProvider 获取最近一次已知的 Location |
LocationProvider getProvider(String name) | 根据名称来获取 LocationProvider |
void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent) | 通过指定的 LocationProvider 周期性地获取定位信息,并通过 intent 启动相应的组件 |
void requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) | 通过指定的 LocationProvider 周期性地获取定位信息,并触发 listener 所对应的触发器 |
LocationProvider:定位组件的抽象表示,通过该类可以获取该定位组件的相关信息。
LocationProvider 提供的常用方法
方法名 | 描述 |
---|---|
int getAccuracy() | 返回 LocationProvider 的精度 |
String getName() | 返回 LocationProvider 的名称 |
int getPowerRequirement() | 获取 LocationProvider 的电源需求 |
Location:该类表示特定时间地理位置信息,位置由经度、纬度、UTC时间戳以及可选的高度、速度、方向等组成。
Location 提供的常用方法
方法名 | 描述 |
---|---|
float getAccuracy() | 获取定位信息的精度 |
double getAltitude() | 获取定位信息的高度 |
float getBearing() | 获取定位信息的方向 |
double getLatitude() | 获取定位信息的纬度 |
double getLongitude() | 获取定位信息的经度 |
String getProvider() | 获取提供该定位信息的 LocationProvider |
float getSpeed() | 获取定位信息的速度 |
举例说明:获取所有可用的 Location Provider
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//获取显示 LocationProvider 名称的 TextView 组件TextView textView = findViewById(R.id.text2);//获取 location 服务LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);//获取系统所有的 LocationProvider 名称List<String> providerNames = locationManager.getAllProviders();//使用 StringBuilder 保存数据StringBuilder stringBuilder = new StringBuilder();//遍历获取到的全部 Locationprovider 名称for(Iterator<String> iterator = providerNames.iterator(); iterator.hasNext(); ) {stringBuilder.append(iterator.next() + "\n");}//显示 LocationProvider 名称textView.setText(stringBuilder.toString());}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="可用LocationProvider:"android:layout_marginTop="100dp"android:textSize="40dp"android:id="@+id/text1"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/text2"android:textSize="35dp"android:layout_marginLeft="20dp"android:layout_below="@+id/text1"/></RelativeLayout>
结果
举例说明:获取动态定位信息
public class MainActivity extends Activity {//获取系统的 LocationManager 对象private LocationManager locationManager;//定义显示 LocationProvider 的 TextView 组件private TextView provider;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);provider = findViewById(R.id.provider);//检测用户是否打开GPSif (!isGpsAble(locationManager)) {Toast.makeText(MainActivity.this, "请打开GPS", Toast.LENGTH_SHORT).show();openGPS2();}//检测用户是否允许定位if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {//提供开启定位的指导界面ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 200);} else {//获取GPS信息startLocation();}}@Overridepublic void onRequestPermissionsResult(int requestCode,@NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);//用户同意权限if (requestCode == 200) {if (grantResults[0] == PackageManager.PERMISSION_GRANTED)startLocation();else //用户拒绝之后,当然我们也可以弹出一个窗口,直接跳转到系统设置页面Toast.makeText(MainActivity.this,"请手动开启权限", Toast.LENGTH_LONG).show();}}//禁止权限检查@SuppressLint("MissingPermission")private void startLocation(){//从GPS获取最近的定位信息Location lc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);//更新信息updateShow(lc);//2秒获取一次、位置间隔1米locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, new LocationListener() {//GPS信息变化则更新@Overridepublic void onLocationChanged(Location location) {updateShow(location);}//位置状态发生改变时更新@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}//定位提供者启动时触发@Overridepublic void onProviderEnabled(String provider) {}//定位提供者关闭时触发@Overridepublic void onProviderDisabled(String provider) {}});}//更新GPS数据@SuppressLint("SetTextI18n")private void updateShow(Location location) {if (location != null) {String string = "当前的位置信息:"+ "\n经度:" + location.getLongitude()+ "\n纬度:" + location.getLatitude()+ "\n高度:" + location.getAltitude()+ "\n速度:" + location.getSpeed()+ "\n方向:" + location.getBearing()+ "\n定位精度:" + location.getAccuracy();provider.setText(string);} else provider.setText("没有获取GPS信息");}//返回 GPS 状态private boolean isGpsAble(LocationManager lm) {return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}//打开设置页面private void openGPS2() {Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivityForResult(intent, 0);}
}
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout android:orientation="vertical"android:layout_height="match_parent"android:layout_width="match_parent"xmlns:android="http://schemas.android.com/apk/res/android"><TextViewandroid:layout_height="match_parent"android:layout_width="match_parent"android:textStyle="bold"android:layout_marginTop="100dp"android:layout_marginLeft="20dp"android:textSize="20sp"android:padding="5dp"android:id="@+id/provider"/></RelativeLayout>
结果
Android:位置服务相关推荐
- Android 位置服务——BaiduLocation的使用
Android 位置服务--BaiduLocation的使用 原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处 ...
- Android位置服务介绍,并介绍如何通过LocationManager对象获取位置信息
1.位置服务,英文翻译为Location-Based Services,简称LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务, ...
- android位置服务与GPS实时定位工具类
一.概述 据专家说:人类活动80%的信息与空间位置信息有关,这还真不是专家吹牛.举个例子:你跟女神约饭,你得知道女神在哪里吧?你们选择约在哪里的餐厅最合适?你们过去分别有多远?你们怎么过去?--总结起 ...
- Android位置服务开发
1. 使用LocationManager获取地理位置信息 代码如下: private TextView positiontext;private String provider;private Loc ...
- android 基于位置服务,Android 基于位置服务的基本知识
1.在android平台使用位置服务需要使用位置管理器,获得方法如下: String locationService =Context.LOCATION_SERVICE; LocationManage ...
- 国外基于android的系统,基于Android的位置服务系统设计与实现
摘要: 近年来,随着移动互联网的飞速发展,位置服务已经成为移动增值业务的一个重要发展方向,然而由于现代位置服务应用规模不断扩大,用户和兴趣点的数据急剧增加,降低了周围兴趣点查询服务的实用性.本文通过地 ...
- android如何让gps服务停止,android – 启动/停止GPS(或位置服务)时接收通知(通过BroadcastReceiver)...
我通过使用侦听PROVIDERS_CHANGED操作的BroadcastReceiver尝试了一种方法,但这只能告诉我何时打开/关闭位置设置.我想知道什么时候使用位置服务来获取任何应用程序的位置.我不 ...
- Android 腾讯位置服务地图简单使用
文章目录 概述 腾讯位置服务地图SDK 兼容性 创建工程 获取Appkey 配置AppKey 配置工程 代码混淆 权限配置 地图 基础地图 地图类型 个性化地图 3D建筑 行政区划 出现的问题及解决 ...
- 关于Android中的位置服务解读
关于Android中的位置服务解读 一提到位置或者定位,一般的开发者会第一时间百度地图和高德.这么做其实把自己仅仅当成了一个Api caller.还是细细了解一下系统的关于位置的架构比较好.下面开始细 ...
- Android 腾讯位置服务使用(详细步骤+源码)
腾讯位置服务使用 前言 正文 一.注册腾讯位置服务账号 二.创建平台应用Appkey 三.创建并配置AS工程 四.定位 ① 连续定位 ② 单次定位 ③ 后台定位 ④ 地理围栏 五.地图 ① 基础地图 ...
最新文章
- 【错误记录】AS 编译报错 ( Android Support plugin 版本太高 | 升级 Android Studio 到最新版本 )
- GVIM编辑器的配置
- 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化
- JS: 浅拷贝vs深拷贝 | 刷题打卡
- Django模板层:内置模板标签if,for in(forloop.counter)with,url,spaceless,autoescape,verbatim,firstof,block,cycle
- 几个不错的开源的.net界面控件[转贴]
- iOS开发 - OC - 实现本地数据存储的几种方式一
- LFSR:线性反馈移位寄存器及其应用
- lottie android 卡顿,lottie动画设计_免异常总结
- 2022--SE-GAN骨架增强的基于gan的毛笔手写字体生成模型原理以及网络结构
- python 数据可视化sns作图
- 呼叫中心系统座席助手的发展历史
- 2001-2022年全国各城市风速数据(逐日、逐月、逐年)
- 【Eigen】【Eigen实践】【Eigen的使用学习记录】
- 还记得小时候玩的泡泡龙吗?用CocosCreator实现它!
- 扒网站工具 linux,wget 递归下载整个网站(网站扒皮必备)
- Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法
- 模拟器v3.1.2官方安卓版
- 《Learning to Denoise Unreliable Intercations for Graph Collaborative Filtering》个人笔记
- xr20230518