热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

今天小编就为大家分享一篇Android6.0获取GPS定位和获取位置权限和位置信息的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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定位和获取位置权限和位置信息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
羊碧刚_648
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有