安卓中实现定位功能

  大家好,今天我们讲一下比较热门的定位服务,闲话少叙直奔主题。因为是使用高德地图所以首先咱们就得先在高德开发平台上注册一个账号,具体注册流程在这里就不一一赘诉了,下面就讲一下再注册成功之后如何申请key,要申请key就得需要发布版NAS1码与测试版NAS1码以及工程的包地址,下面就讲一下如何获取NAS1码。

第一步:申请NAS1

1、若是想获得发布版的NAS1码,就得先把你的工程打包,打包成功后你就会获得一个以.jsk为后缀名的文件,打包的时候你会设置一个密码,一会用到这个文件的储存路径以及你设置的密码。

2、打开你的androidstudio选择你的工程,在控制台选择Terminal目录下,在光标显示的地方输入 keytool -v -list -KeyStore KeyStore文件地址这段代码 ,KeyStore文件地址就是你的.jsk文件的地址,输入完后按回车会让你输入密码你直接输入,注意你输入密码的时候控制台并不显示,但不要紧控制台已经录入,然后按回车就会出现一系列的信息其中就包括NAS1码,这个就是发布版的NAS1码。

3、如何获得测试版的NAS1码,这里就需要自己写一个工具类来把测试版的NAS1打印出来,具体工具类代码如下:

 1 import android.content.Context;
 2 import android.content.pm.PackageInfo;
 3 import android.content.pm.PackageManager;
 4
 5 import java.security.MessageDigest;
 6 import java.security.NoSuchAlgorithmException;
 7 import java.util.Locale;
 8
 9 /**
10  * Created by zhangdi on 2016/9/2.
11  * 用来获取测试版SHA1的工具类
12  */
13 public class Sha1 {
14     public static String sHA1(Context context) {
15         try {
16             PackageInfo info = context.getPackageManager().getPackageInfo(
17                     context.getPackageName(), PackageManager.GET_SIGNATURES);
18             byte[] cert = info.signatures[0].toByteArray();
19             MessageDigest md = MessageDigest.getInstance("SHA1");
20             byte[] publicKey = md.digest(cert);
21             StringBuffer hexString = new StringBuffer();
22             for (int i = 0; i < publicKey.length; i++) {
23                 String appendString = Integer.toHexString(0xFF & publicKey[i])
24                         .toUpperCase(Locale.US);
25                 if (appendString.length() == 1)
26                     hexString.append("0");
27                 hexString.append(appendString);
28                 hexString.append(":");
29             }
30             String result = hexString.toString();
31             return result.substring(0, result.length()-1);
32         } catch (PackageManager.NameNotFoundException e) {
33             e.printStackTrace();
34         } catch (NoSuchAlgorithmException e) {
35             e.printStackTrace();
36         }
37         return null;
38     }
39 }

获得NAS1码就直接类名.方法名就可以打印出来。至此第一步获得NAS1码的工序就完成了,下面就可以去高德开发平台上申请key了,注意他还需要一个包名,即pagename,这就是你工程中的清单文件下的

1 package="com.jereh.biyingapplication"

然后就完成申请key的步骤了。

第二步:导入jar包(jar包我只提供了包名,大家可以去GitHub上自行下载,如果大家感觉麻烦可以去我的有道笔记里下载,文末我会附上此篇文章的有道链接)

1、首先需要下载这个jar包

  AMap_Location_V2.8.0_20160811.jar

以后如果再要开发2D地图还需要导入这个Jar包

  AMap_2DMap_V2.9.0_20160525.jar

导入包并添加依赖成功后就可以进入正题,定位服务了!!!

第三步:实现定位功能

1、因为定位功能需要获取APP的位置信息,所以安卓6.0版本之上的还需要获取权限,关于如何获取权限,大家可以参考我的判断权限以及获取权限的那篇文章,这里就不赘述了

2、同样因为权限问题,大家还需要在工程的清单文件里添加下面这些请求:

 1 <!-- Normal Permissions 不需要运行时注册 -->
 2 <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
 3 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 4 <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
 5 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 6 <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
 7 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 8 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
 9
10 <!-- 请求网络 -->
11 <uses-permission android:name="android.permission.INTERNET" />
12
13 <!-- 不是SDK需要的权限,是示例中的后台唤醒定位需要的权限 -->
14 <uses-permission android:name="android.permission.WAKE_LOCK" />
15
16 <!-- 需要运行时注册的权限 -->
17 <!-- 用于进行网络定位 -->
18 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
19 <!-- 用于访问GPS定位 -->
20 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
21
22 <!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
23 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
24 <!-- 读取缓存数据 -->
25 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
26
27 <!-- 用于读取手机当前的状态 -->
28 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
29
30 <!-- 更改设置 -->
31 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
32
33 <!-- 外部存储的权限 -->
34 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
35 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
36 <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />

这个也不是都用于请求位置信息权限,大家用到什么可以选择性的添加,因为定位是一个服务(service)所以再往下就是要为这个service在清单文件里声明一下,如下代码,直接copy:

<!-- 定位服务 -->
<service android:name="com.amap.api.location.APSService" />

<meta-data
    android:name="com.amap.api.v2.apikey"
    android:value="6cd0117ba5d8e074a98ba70906f3efe2">

    <!-- 开发者申请的key -->
</meta-data>

这里需要注意的是value里填写的值是你从高德开发平台上申请的key值,做好这一切之后就可以进入正题,在你的APP中实现定位服务功能了。

3、java中设置定位服务的代码:(我这里都是封装的方法,大家可以自行斟酌)

第一步:设置定位模式:

 1 /**
 2  * 设置定位模式
 3  */
 4 private void setLocationClient(){
 5     //定位模式,高精度定位,仅设备,网络
 6     clientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
 7     //是否单次定位
 8     clientOption.setOnceLocation(false);
 9     //是否返回逆地理地理数据
10     clientOption.setNeedAddress(true);
11     //定位时间间隔
12     clientOption.setInterval(60000);
13     //定位超时时长
14     clientOption.setHttpTimeOut(30000);
15 }

   第二步:设置定位属性:

 1 /**
 2  * 设置定位属性
 3  */
 4 private void locationCity(){
 5     //设置定位属性
 6     setLocationClient();
 7     locationClient.setLocationOption(clientOption);
 8     locationClient.startLocation();
 9     locationClient.setLocationListener(this);
10 }

   第三步定位回调:

 1 /**
 2  * 定位回调
 3  * @param aMapLocation
 4  */
 5 @Override
 6 public void onLocationChanged(AMapLocation aMapLocation) {
 7     //定位回调
 8     if (aMapLocation!=null&&aMapLocation.getErrorCode()==0){
 9         Log.i("定位回调",aMapLocation.getCity().toString());
10     }
11     if (aMapLocation.getErrorCode()!=0){
12         Log.i("定位回调","错位信息"+aMapLocation.getErrorCode());
13         Log.i("定位回调","错位信息"+aMapLocation.getErrorInfo());
14     }
15 }

其中log出来的就是定位服务的信息,定位成功与定位失败都会在控制台输出,至此使用高德地图实现定位服务的工作就完成了,感觉还是很简单明了的,希望能给大家在定位方面的学习有所帮助,如果大家阅读之后感觉对您的理解有所帮助的话就请推荐一下,谢谢。

有道笔记链接: http://note.youdao.com/noteshare?id=afe19f09d5c431bdd8e09b28781cb0e0

时间: 2024-10-21 07:57:38

安卓中实现定位功能的相关文章

在程序中实现定位功能

Core Location是iOS SDK中一个提供设备位置的框架.可以使用三种技术来获取位置:GPS.蜂窝或WiFi.在这些技术中,GPS最为精准,如果有GPS硬件,Core Location将优先使用它.如果设备没有GPS硬件(如WiFi iPad)或使用GPS获取当前位置时失败,Core Location将退而求其次,选择使用蜂窝或WiFi. Core Location的大多数功能是由位置管理器(CLLocationManager)提供的,可以使用位置管理器来指定位置更新的频率和精度,以及

ios 定位新功能----在程序中实现定位功能

Core Location是iOS SDK中一个提供设备位置的框架.可以使用三种技术来获取位置:GPS.蜂窝或WiFi.在这些技术中,GPS最为精准,如果有GPS硬件,Core Location将优先使用它.如果设备没有GPS硬件(如WiFi iPad)或使用GPS获取当前位置时失败,Core Location将退而求其次,选择使用蜂窝或WiFi. Core Location的大多数功能是由位置管理器(CLLocationManager)提供的,可以使用位置管理器来指定位置更新的频率和精度,以及

浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)

  今天我们来谈下百度地图的定位功能.在此之前我已经将百度地图的基本地图大概说了下,事实上百度地图的基本功能还有非常多的内容. 感兴趣的能够到百度地图的开发人员的官网看看.今天就開始来讲下百度地图中的定位功能. 今天所讲的百度地图所涉及的内容主要有:基本定位的实现.自己定义定位图标.结合方向传感器定位,选择定位中的几种模式(罗盘模式,普通模式,尾随模式). 一.基本定位的实现: 所谓定位无非就是获取到一个地方所处地球的经纬度坐标.这个反映到地图中就是一个点.可是怎么去实现一个定位呢?? 首先,须

IOS 开启定位功能 CLLocationManager 介绍-简单使用

iOS 中的定位功能,主要在 CoreLocation库中,需要用到位置管理器 CLLocationManager 来完成绝大多数事情. 要使用 CLLocationManager 首先需要一个对象~ 以及对它进行简单的设置,最后开启定位功能, 就开始定位了,定位成功或者失败后都会调用代理方法返回信息 1 CLLocationManager *manger; 2 3 manger = [[CLLocationManager alloc] init]; //初始化 4 5 manger.deleg

(十八)WebGIS中清空功能和地图定位功能的设计以及实现

1.背景 当地图中增加了很多元素后,对不同的元素需要进行一定的控制,最简单的控制就是能对元素有选择的进行清空删除.在本节中,还将介绍WebGIS中另外一个常用功能,即地图定位功能.具体描述便是:当输入一个坐标点后,能够将地图缩放到该点处.下面我便就以上两个功能展开此章节的内容. 2.清空功能 2.1设计思路 根据功能点,我们可以将清空分为如下几个情形: a.清空某个或者指定个数元素 b.清空某类或多类元素 c.清空所有元素 在之前的矢量图层原理章节中,我已经就WebGIS中的矢量图层原理做了详细

Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理

解决WebView的定位功能.视频全屏播放.下载功能.页面Url的处理.进度条处理 事先说明: 定位功能在安卓6.0需要用户手动确认权限后才能使用 若需在安卓6.0适配WebView的定位功能,则需要在WebView中手动增加用户权限访问 详细可百度安卓6.0权限管理系统,或者采用第三方封装好的权限管理类进行编写(如Bmob) 如果对内容不理解的话,可参考最后的整个类的代码 如果对BaseActivity这个抽象类不理解的话,可以查看下面一篇文章对BaseActivity的介绍 步骤一:webv

安卓中常用权限

安卓中常用权限 添加WiFi以及访问网络的权限:  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>  &l

【MUI】百度地图定位功能

博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //var map = new BMap.Map("container"); // navigator.geolocation.getCurrentPosition(function(position) { // longitude = position.coords.longitude; //

jQuery中的$.support功能检测

jQuery对浏览器兼容性的处理 jQuery给我们带来的最大好处就是帮我们处理好了浏览器之间的兼容性.jQuery处理兼容性时主要是进行功能检测.$.support中存放了浏览器对各个具有兼容性功能的兼容性,主要在jQuery内部处理.当我开发插件时,也可以直接通过它来判断. $.support检测的功能 1.boxModel:如果页面是按照w3c css盒模型来渲染返回true,在IE6.IE7中的混淆模式放回false. 2.checkOn:动态创建的radio和checkbox的默认值是