編輯:關於android開發
大家好,今天我們講一下比較熱門的定位服務,閒話少敘直奔主題。因為是使用高德地圖所以首先咱們就得先在高德開發平台上注冊一個賬號,具體注冊流程在這裡就不一一贅訴了,下面就講一下再注冊成功之後如何申請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
Android 系統API實現數據庫的增刪改查和SQLite3工具的使用,androidsqlite3在《Android SQL語句實現數據庫的增刪改查》中介紹了使用sq
Linux常用命令-50:crontab命令http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html前一天
Android Eclipse 導入 AS Gradle AAR 庫手冊 序言 這是一篇半技術類文章。眾所周知現在Google主推Android Studio開發工具,而
Android Picasso 獲取遠程圖片並顯示, Picasso是Square公司開源的一個Android圖形緩存庫,地址http://square.git