前言

在开发 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:位置服务相关推荐

  1. Android 位置服务——BaiduLocation的使用

    Android 位置服务--BaiduLocation的使用 原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处 ...

  2. Android位置服务介绍,并介绍如何通过LocationManager对象获取位置信息

     1.位置服务,英文翻译为Location-Based Services,简称LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务, ...

  3. android位置服务与GPS实时定位工具类

    一.概述 据专家说:人类活动80%的信息与空间位置信息有关,这还真不是专家吹牛.举个例子:你跟女神约饭,你得知道女神在哪里吧?你们选择约在哪里的餐厅最合适?你们过去分别有多远?你们怎么过去?--总结起 ...

  4. Android位置服务开发

    1. 使用LocationManager获取地理位置信息 代码如下: private TextView positiontext;private String provider;private Loc ...

  5. android 基于位置服务,Android 基于位置服务的基本知识

    1.在android平台使用位置服务需要使用位置管理器,获得方法如下: String locationService =Context.LOCATION_SERVICE; LocationManage ...

  6. 国外基于android的系统,基于Android的位置服务系统设计与实现

    摘要: 近年来,随着移动互联网的飞速发展,位置服务已经成为移动增值业务的一个重要发展方向,然而由于现代位置服务应用规模不断扩大,用户和兴趣点的数据急剧增加,降低了周围兴趣点查询服务的实用性.本文通过地 ...

  7. android如何让gps服务停止,android – 启动/停止GPS(或位置服务)时接收通知(通过BroadcastReceiver)...

    我通过使用侦听PROVIDERS_CHANGED操作的BroadcastReceiver尝试了一种方法,但这只能告诉我何时打开/关闭位置设置.我想知道什么时候使用位置服务来获取任何应用程序的位置.我不 ...

  8. Android 腾讯位置服务地图简单使用

    文章目录 概述 腾讯位置服务地图SDK 兼容性 创建工程 获取Appkey 配置AppKey 配置工程 代码混淆 权限配置 地图 基础地图 地图类型 个性化地图 3D建筑 行政区划 出现的问题及解决 ...

  9. 关于Android中的位置服务解读

    关于Android中的位置服务解读 一提到位置或者定位,一般的开发者会第一时间百度地图和高德.这么做其实把自己仅仅当成了一个Api caller.还是细细了解一下系统的关于位置的架构比较好.下面开始细 ...

  10. Android 腾讯位置服务使用(详细步骤+源码)

    腾讯位置服务使用 前言 正文 一.注册腾讯位置服务账号 二.创建平台应用Appkey 三.创建并配置AS工程 四.定位 ① 连续定位 ② 单次定位 ③ 后台定位 ④ 地理围栏 五.地图 ① 基础地图 ...

最新文章

  1. 【错误记录】AS 编译报错 ( Android Support plugin 版本太高 | 升级 Android Studio 到最新版本 )
  2. GVIM编辑器的配置
  3. 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化
  4. JS: 浅拷贝vs深拷贝 | 刷题打卡
  5. Django模板层:内置模板标签if,for in(forloop.counter)with,url,spaceless,autoescape,verbatim,firstof,block,cycle
  6. 几个不错的开源的.net界面控件[转贴]
  7. iOS开发 - OC - 实现本地数据存储的几种方式一
  8. LFSR:线性反馈移位寄存器及其应用
  9. lottie android 卡顿,lottie动画设计_免异常总结
  10. 2022--SE-GAN骨架增强的基于gan的毛笔手写字体生成模型原理以及网络结构
  11. python 数据可视化sns作图
  12. 呼叫中心系统座席助手的发展历史
  13. 2001-2022年全国各城市风速数据(逐日、逐月、逐年)
  14. 【Eigen】【Eigen实践】【Eigen的使用学习记录】
  15. 还记得小时候玩的泡泡龙吗?用CocosCreator实现它!
  16. 扒网站工具 linux,wget 递归下载整个网站(网站扒皮必备)
  17. Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法
  18. 模拟器v3.1.2官方安卓版
  19. 《Learning to Denoise Unreliable Intercations for Graph Collaborative Filtering》个人笔记
  20. xr20230518

热门文章

  1. 5G/NR - PDSCH DMRS
  2. 暴风集团公布前三季度业绩预告,盈利同比增长惊人
  3. 深圳项目可行性研究报告编写要点
  4. 秒杀的性能问题和超卖
  5. C语言数组越界及溢出
  6. python将pdf文件类型转换为txt、docx、excel
  7. 传奇所有地图参数的意思
  8. Vivo x9 7.0以上系统 android studio真机调试安装失败的解决方案
  9. 第一章 windows应用程序开发入门
  10. C语言程序设计:汉诺塔