标签:
大家好,今天我们讲一下比较热门的定位服务,闲话少叙直奔主题。因为是使用高德地图所以首先咱们就得先在高德开发平台上注册一个账号,具体注册流程在这里就不一一赘诉了,下面就讲一下再注册成功之后如何申请key,要申请key就得需要发布版NAS1码与测试版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"
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>
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
标签:
原文地址:http://www.cnblogs.com/zhangdiIT/p/5837584.html