• 安卓定位可以通过使用GPS或者通过network获取地址,俩个都需要增加获取位置的权限!
  • 需要在AndroidManifest里面增加权限!
  • 分别介绍一下学习心得!
//ACCESS_FINE_LOCATION:允许APP访问精确地理位置。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
//ACCESS_COARSE_LOCATION:允许APP访问大概地理位置
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

GPS具体实现:

//检查是否开启权限!if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "权限不够", Toast.LENGTH_LONG).show();return;}//获取一个地址管理者,获取的方法比较特殊,不是直接new出来的LocationManager locationManager = (LocationManager) getSystemService(mContext.LOCATION_SERVICE);//使用GPS获取上一次的地址,这样获取到的信息需要多次,才能够显示出来,所以后面有动态的判断Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
//判断是否用户打开了GPS开关,这个和获取权限没关系GPSisopen(locationManager);
//显示信息,可以根据自己的传入对应的location!!!upLoadInfor(location);//获取时时更新,第一个是Provider,第二个参数是更新时间1000ms,第三个参数是更新半径,第四个是监听器locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 8, new LocationListener() {@Override/*当地理位置发生改变的时候调用*/public void onLocationChanged(Location location) {upLoadInfor(location);//实时的显示信息}/* 当状态发生改变的时候调用*/@Overridepublic void onStatusChanged(String s, int i, Bundle bundle) {Log.d("GPS_SERVICES", "状态信息发生改变");}/*当定位者启用的时候调用*/@Overridepublic void onProviderEnabled(String s) {Log.d("TAG", "onProviderEnabled: ");}@Overridepublic void onProviderDisabled(String s) {Log.d("TAG", "onProviderDisabled: ");}});}//判断是否用户打开GPS开关,并作指导性操作!private void GPSisopen(LocationManager locationManager) {if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {Toast.makeText(this, "请打开GPS", Toast.LENGTH_SHORT);final AlertDialog.Builder dialog = new AlertDialog.Builder(this);dialog.setTitle("请打开GPS连接");dialog.setMessage("为了获取定位服务,请先打开GPS");dialog.setPositiveButton("设置", new android.content.DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//界面跳转Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivityForResult(intent, 0);}});dialog.setNegativeButton("取消", new android.content.DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {dialogInterface.dismiss();}});//调用显示方法!dialog.show();}}
//同时获取到的只是location如果想根据location获取具体地址,可以通过Android提供的API获取具体的地点!//传进来一个location返回一个Address列表,这个是耗时的操作所以需要在子线程中进行!!!
//传进来一个location返回一个Address列表,这个是耗时的操作所以需要在子线程中进行!!!
//传进来一个location返回一个Address列表,这个是耗时的操作所以需要在子线程中进行!!!private List<Address> getAddress(Location location) {List<Address> result = null;try {if (location != null) {Geocoder gc = new Geocoder(this, Locale.getDefault());result = gc.getFromLocation(location.getLatitude(),location.getLongitude(), 1);}} catch (Exception e) {e.printStackTrace();}return result;}//采取直接用匿名类的方法,构造了一个线程,但是在子线程中不能直接修改主线程的内容,否则会报错,但是!!!,当我用Android8.0模拟器测试的时候没有崩,当用Android7.0测试的时候直接崩溃,所以还是老老实实通过handler来解决这个问题!
new Thread(new Runnable() {@Overridepublic void run() {Log.e("Run", "A new Thread");try {final Location location1 = finalLocation;addresses = getAddress(location1);if (addresses != null) {Log.e("run: ", addresses.toString());Message message = new Message();message.what = 1;//信息内容handler.sendMessage(message);//发送信息}} catch (Exception e) {Log.e("Exception", "ERRPOR");}}}).start();//主线程中处理函数private Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case 1:tvMapInfo.setText(tvMapInfo.getText() + "\n" + addresses.toString());break;default:break;}}};

基站定位:

  • 优点耗时短,缺点定位精度不如GPS
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

Android 定位的实现相关推荐

  1. android 定位的几种方式介绍

    [地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...

  2. android 定位服务 耗电吗,关于Android的定位服务

    今天因为工作须要,把以前编写的一个GPS测试法度榜样拿出来从新修改了一下.这个法度榜样说起来竽暌剐些汗青了,是我11年编写的,那时刻学了Android开辟没多久,算是一个实验性的作品.如今工作须要,从 ...

  3. 定位 android8.1.0,8.1.2 实现Android定位(2)

    8.1.2  实现Android定位(2) (3)实现定位管理器 可以使用Context.getSystemService()方法实现定位管理器功能,并传入Context.LOCATION_ SERV ...

  4. android 定位 广播,android - 如何触发广播接收器在GPS开启/关闭? - SO中文参考 - www.soinside.com...

    如何触发广播接收器在GPS开启/关闭? 问题描述 投票:35回答:5 public class BootReceiver extends BroadcastReceiver { @Override p ...

  5. 利用百度地图Android定位SDK获取经纬度

    环境的搭建(参考上一次的文章) 百度地图Android定位SDK的使用 2.在Android studio里设计程序来获取经纬度 界面布局activity_main.xml文件的源代码: <?x ...

  6. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  7. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...

  8. 七、Android定位与拨打电话、发送短信

    Android定位与拨打电话.发送短信 前言 项目目录 1.定位 (1)代码LocationActivity.activity_location (2)权限 2.拨打电话.发送短信 3.MainAct ...

  9. Android定位方式和测试方法,定位方式(d16)

    一,回顾, ①selector和xpath的区别,selector是解析的html,xpth是解析的xml,所以使用selector比使用xpath快, ②定位元素的单数和复数,当使用单数定位不到元素 ...

  10. android定位:获取当前位置的经纬度

    Android定位主要使用的是基于位置服务(Location Based Service)技术,有了 Android 系统作为载体,我们可以利用定位出的位置进行许多丰富多彩的操作,比如定位城市,根据我 ...

最新文章

  1. 普通平键的主要尺寸有_餐厅放多大尺寸的餐桌合适?这几种尺寸,适合所有户型...
  2. flutter_web 实战之文章列表与详情
  3. (转)虚函数和纯虚函数区别
  4. Excel告诉你身份证号码里藏着de秘密
  5. jquery中$(document).ready(function(){//todo});window.onload时间线关系
  6. 中的多行卡片如何居中_编程中如何让图片垂直居中?两种方案分享给大家
  7. spring boot注释_使用Spring Boot和注释支持配置Spring JMS应用程序
  8. java order()_java.util.Collections.reverseOrder()
  9. 任正非:6G华为也是领先世界 或在十年后投入使用
  10. Linux FastDFS 分布式文件系统安装
  11. 如何用阿里云服务器建立一个wordpress网站?
  12. list()的相关问题
  13. d3 svg path添加文本_svg演示kafka的broker和zookeeper动态交互
  14. 使用dsoframer演示ppt
  15. java编程规范之java命名规范
  16. 网上十大经典黑客软件大曝光(转)
  17. html怎么把正方形改成圆形,css如何把正方形变成圆形
  18. JPA ObjectDeletedException: deleted instance passed to merge
  19. 创新的原则(《创新与企业家精神》彼得·德鲁克)
  20. Python pyd文件的制作和编译,以及程序源代码的保护

热门文章

  1. 一个还不错的离线 IP 地址定位库,99.9% 准确率!
  2. discuz 单点登录 ucenter
  3. Android 获取手机号码及IMEI码
  4. vulhub靶场搭建+docker环境搭建详解(最稳定方式)
  5. c语言float型存储方式,C语言float型数据在内存中的储存方式
  6. 产品经理如何了解高深莫测的大数据?
  7. 《神经质人格》摘录(导言,第一章)
  8. 业务系统接入单点登录服务
  9. 佛说爱情一:佛前的三支蜡烛
  10. 软件打包为exe NSIS单文件封包工具V2.3