你們好,今天咱們講一下比較熱門的定位服務,閒話少敘直奔主題。由於是使用高德地圖因此首先我們就得先在高德開發平臺上註冊一個帳號,具體註冊流程在這裏就不一一贅訴了,下面就講一下再註冊成功以後如何申請key,要申請key就得須要發佈版NAS1碼與測試版NAS1碼以及工程的包地址,下面就講一下如何獲取NAS1碼。java
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,這就是你工程中的清單文件下的android
1 package="com.jereh.biyingapplication" api
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 }
第三步定位回調:app
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出來的就是定位服務的信息,定位成功與定位失敗都會在控制檯輸出,至此使用高德地圖實現定位服務的工做就完成了,感受仍是很簡單明瞭的,但願能給你們在定位方面的學習有所幫助,若是你們閱讀以後感受對您的理解有所幫助的話就請推薦一下,謝謝。ide
有道筆記連接: http://note.youdao.com/noteshare?id=afe19f09d5c431bdd8e09b28781cb0e0工具