Android6.0获取GPS定位和获取位置权限和位置信息的方法

1.添加权限--6.0之后要动态获取,下面会说

<uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"/>

2.直接上代码,不多说,代码中注释很详细。

private static final int BAIDU_READ_PHONE_STATE = 100;//定位权限请求
private static final int PRIVATE_CODE = 1315;//开启GPS权限
/**
 * 检测GPS、位置权限是否开启
 */
public void showGPSContacts() {
 lm = (LocationManager) this.getSystemService(this.LOCATION_SERVICE);
 boolean ok = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
 if (ok) {//开了定位服务
  if (Build.VERSION.SDK_INT >= 23) { //判断是否为android6.0系统版本,如果是,需要动态添加权限
   if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
     != PERMISSION_GRANTED) {// 没有权限,申请权限。
    ActivityCompat.requestPermissions(this, LOCATIONGPS,
      BAIDU_READ_PHONE_STATE);
   } else {
    getLocation();//getLocation为定位方法
   }
  } else {
   getLocation();//getLocation为定位方法
  }
 } else {
  Toast.makeText(this, "系统检测到未开启GPS定位服务,请开启", Toast.LENGTH_SHORT).show();
  Intent intent = new Intent();
  intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
  startActivityForResult(intent, PRIVATE_CODE);
 }
}

/**
 * 获取具体位置的经纬度
 */
private void getLocation() {
 // 获取位置管理服务
 LocationManager locationManager;
 String serviceName = Context.LOCATION_SERVICE;
 locationManager = (LocationManager) this.getSystemService(serviceName);
 // 查找到服务信息
 Criteria criteria = new Criteria();
 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度
 criteria.setAltitudeRequired(false);
 criteria.setBearingRequired(false);
 criteria.setCostAllowed(true);
 criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗
 String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
 /**这段代码不需要深究,是locationManager.getLastKnownLocation(provider)自动生成的,不加会出错**/
 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PERMISSION_GRANTED) {
  // TODO: Consider calling
  // ActivityCompat#requestPermissions
  // here to request the missing permissions, and then overriding
  // public void onRequestPermissionsResult(int requestCode, String[] permissions,
  //           int[] grantResults)
  // to handle the case where the user grants the permission. See the documentation
  // for ActivityCompat#requestPermissions for more details.
  return;
 }
 Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置
 updateLocation(location);
}

/**
 * 获取到当前位置的经纬度
 * @param location
 */
private void updateLocation(Location location) {
 if (location != null) {
  double latitude = location.getLatitude();
  double longitude = location.getLongitude();
  LogUtil.e("维度:" + latitude + "\n经度" + longitude);
 } else {
  LogUtil.e("无法获取到位置信息");
 }
}
/**
 * Android6.0申请权限的回调方法
 */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 switch (requestCode) {
  // requestCode即所声明的权限获取码,在checkSelfPermission时传入
  case BAIDU_READ_PHONE_STATE:
   //如果用户取消,permissions可能为null.
   if (grantResults[0] == PERMISSION_GRANTED && grantResults.length > 0) { //有权限
    // 获取到权限,作相应处理
    getLocation();
   } else {
    showGPSContacts();
   }
   break;
  default:
   break;
 }
}

onRequestPermissionsResult 这个方法主要是动态获取6.0权限,返回时的回调,我这里需求是获取权限之后获取到当前位置的经纬度详细信息

3.下面是当点击获取GPS定位,跳转到系统开关,ActivityResult回调,我这里做的是必须要开启GPS权限,没有开启会一直让用户开启权限,怎么决定,看具体需求

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 switch (requestCode) {
  case PRIVATE_CODE:
    showContacts();
   break;

 }
}

4.动态权限设置添加多条权限

static final String[] LOCATIONGPS = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
  Manifest.permission.ACCESS_FINE_LOCATION,
  Manifest.permission.READ_PHONE_STATE};

注:代码很详细!基础知识写的不好,大佬勿喷,谢谢!

以上这篇Android6.0获取GPS定位和获取位置权限和位置信息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Android百度定位导航之基于百度地图移动获取位置和自动定位

    一.问题描述 使用百度地图实现如图所示应用,首先自动定位当前我起始位置(小圆点位置),并跟随移动不断自动定位我的当前位置 百度Api不同版本使用会有些差异,本例中加入lib如下: 二.编写MyApplication类 public class MyApplication extends Application { static MyApplication myApplication; BMapManager mBMapManager = null; String mStrKey = "7ZfuR

  • Android获取位置信息的方法

    本文实例为大家分享了Android获取位置信息的具体代码,供大家参考,具体内容如下 1.位置服务的简介:位置服务,英文翻译为Location-Based Services,缩写为LBS,又称为定位服务或基于位置的服务,融合了GPS定位.移动通信.导航等多种技术,提供与空间位置相关的综合应用服务,基于位置的服务发展很迅速,涉及商务.医疗.工作和生活的各个方面,为用户提供定位.追踪和敏感区域警告等一系列服务.比如谷歌地图,百度地图,都需要通过位置服务. 2.Android平台下支持提供位置服务的AP

  • Android基于高德地图poi的仿微信获取位置功能实例代码

    1.打开页面自动定位,同时搜索周边所有poi 2.点击搜索按钮,输入关键子,获取关键字搜索结果 3.选取listview中的一项即可定位到该位置,或者获取任何消息 4.文件类 1.MapActivity public class MapActivity extends Activity implements PoiSearch.OnPoiSearchListener { private MapView mMapView = null; private AMap aMap; private MyL

  • Android打开GPS导航并获取位置信息返回null解决方案

    最近在做一个 Android 项目,需要用到GPS获取位置信息,从 API 查了一下,发现获取位置信息仅需极其简单的一句即可: 复制代码 代码如下: getLastKnownLocation(LocationManager.GPS_PROVIDER), 于是高兴地不得了.可是一写进代码里,返回值(Location 类型)居然一直为null..郁闷的不得了.在网上查了好久,发现好多人都和我一样纠结于这个问题上,有人说是因为GPS没打开,也有人说是相关权限没加上..可是我的明明已经在设置里打开,权限

  • 浅析Android手机卫士之手机实现短信指令获取位置

    推荐阅读: 浅析Android手机卫士sim卡绑定 深入浅析Android手机卫士保存密码时进行md5加密 详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 浅析Android手机卫士读取联系人 浅析Android手机卫士接收短信指令执行相应操作 浅析Android手机卫士手机定位的原理 获取位置 新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreat

  • Android6.0获取GPS定位和获取位置权限和位置信息的方法

    1.添加权限--6.0之后要动态获取,下面会说 <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"/> 2.直接上代码,不多说,代码中注释很详细. private static final int BAIDU_READ_PHONE_STATE = 100;//定位权限请求 private static final int PRIVATE_CODE = 1315;//开启GPS权限

  • Java实现获取cpu、内存、硬盘、网络等信息的方法示例

    本文实例讲述了Java实现获取cpu.内存.硬盘.网络等信息的方法.分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files 或点击此处本站下载. 解压压缩包,将lib下sigar.jar导入eclipse的CL

  • python实现 获取b站主播直播间 粉丝牌信息的方法

    前言 用于实现通过牌子逆向查主播信息这个功能.插件基于Nonebot2开发,链接:https://github.com/Ikaros-521/nonebot_plugin_searchBiliInfo 工程下载 github:https://github.com/Ikaros-521/get_bili_medal_listgitee:https://gitee.com/ikaros-521/get_bili_medal_list 目录结构 data.py数据源自vtbs.moe1.py用于获取数

  • PHP获取mysql数据表的字段名称和详细信息的方法

    首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句: 复制代码 代码如下: SHOW DATABASES                                //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name]                    //列出数据库数据表. SHOW CREATE TABLES tbl_name                    //导出数据表结构. SHOW TABLE STATUS [FR

  • Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical&q

  • 安卓Android6.0权限动态获取操作示例

    本文实例讲述了安卓Android6.0权限动态获取操作.分享给大家供大家参考,具体如下: 众所周知 , 安卓6.0现在运用的越来越广泛 , 因为相对于之前的几个版本 , 对于用户权限这个概念确实不是很重视 , 而6.0 之后 , 为了提升用户的操作安全性 ,  运行时权限诞生了, 就是在用户运行软件的时候动态获取所需要的权限 , 下面跟大家分享一个我的代码案例 : import android.Manifest; import android.app.AlertDialog; import an

  • Android编程获取GPS数据的方法详解

    本文实例讲述了Android编程获取GPS数据的方法.分享给大家供大家参考,具体如下: GPS是Android系统中重要的组成部分,通过它可以衍生出众多的与位置相关的应用. Android的GPS有一个专门的管理类,称为LocationManager,所有的GPS定位服务都由其对象产生并进行控制. 首先需要明确的是,LocationManager类的对象获取并不是直接创建的,而是由系统提供的,具体来说,通过如下方法,为一个LocationManager对象建立一个对象引用: 复制代码 代码如下:

  • 微信小程序用户位置权限的获取方法(拒绝后提醒)

    微信小程序获取用户当前位置有三个方式: 1. wx.getLocation(多与wx.openLocation一起用) 获取当前的精度.纬度.速度.不需要授权.当type设置为gcj02 返回可用于wx.openLocation的坐标 2. wx.chooseLocation 需要授权,打开地图选择位置 第一次调用方法时先出现 允许权限之后之后再出现 如果第一次就不允许,则一直调用wx.chooseLocation的fail方法 3. wx.openLocation 需要授权,使用微信内置地图查

  • React+高德地图实时获取经纬度,定位地址

    目录 1. 初始化地图 2. 地图扎点 3. 开启定位 4. 监听地图变化 5. 获取详细地址 6. 扎点动画

随机推荐