百度地圖定位 : 擷取當前位置的經緯度,當前位置經緯度
說明:
1.初始化 BaiduMap SDK要在顯示介面之前,即:
SDKInitializer.initialize(Context);
setContentView(R.layout.main);
2. 設定定位的模式是 LocationMode.Hight_Accuracy 時,在室內可能無法擷取到準確的經緯度,會得到預設的值是4.9E-324
處理辦法是將模式改為Battery_Saving,或到室外
3.可以根據當前裝置網路連接情況和GPS是否開啟來設定定位元模式
//獲得網路連接情況
ConnectivityManager cManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cManager.getActiveNetworkInfo();
//擷取GPS的串連情況
LocationManager lManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(lManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, "GPS已開啟", 0).show();
}
4.使用經緯度要在public void onReceiveLocation(BDLocation loc) {}方法中操作
步驟一:匯入百度定位SDK包
第二部:在AndroidManifest.xml資訊清單檔中添加存取權限和服務等,代碼如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.qf.location" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="18" />10 11 <!-- 添加的內容 1 (存取權限) -->12 <uses-permission android:name="android.permission.GET_ACCOUNTS" />13 <uses-permission android:name="android.permission.USE_CREDENTIALS" />14 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />15 <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />16 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />17 <uses-permission android:name="android.permission.INTERNET" />18 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />19 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />20 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />21 <uses-permission android:name="android.permission.READ_PHONE_STATE" />22 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />23 <uses-permission android:name="android.permission.BROADCAST_STICKY" />24 <uses-permission android:name="android.permission.WRITE_SETTINGS" />25 <uses-permission android:name="android.permission.READ_PHONE_STATE" />26 <!-- 這個許可權用於進行網路定位 -->27 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >28 </uses-permission>29 <!-- 這個許可權用於訪問GPS定位 -->30 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >31 </uses-permission>32 <!-- 用於訪問wifi網路資訊,wifi資訊會用於進行網路定位 -->33 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >34 </uses-permission>35 <!-- 擷取電訊廠商資訊,用於支援提供電訊廠商資訊相關的介面 -->36 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >37 </uses-permission>38 <!-- 這個許可權用於擷取wifi的擷取許可權,wifi資訊會用來進行網路定位 -->39 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >40 </uses-permission>41 <!-- 用於讀取手機當前的狀態 -->42 <uses-permission android:name="android.permission.READ_PHONE_STATE" >43 </uses-permission>44 <!-- 寫入擴充儲存,向擴充卡寫入資料,用於寫入離線定位元據 -->45 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >46 </uses-permission>47 <!-- 訪問網路,網路定位需要上網 -->48 <uses-permission android:name="android.permission.INTERNET" />49 <!-- SD卡讀取許可權,使用者寫入離線定位元據 -->50 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >51 </uses-permission>52 <!-- 允許應用讀取低層級的系統記錄檔 -->53 <uses-permission android:name="android.permission.READ_LOGS" >54 </uses-permission>55 56 <application57 android:allowBackup="true"58 android:icon="@drawable/ic_launcher"59 android:label="@string/app_name"60 android:theme="@style/AppTheme" >61 <activity62 android:name="com.qf.location.MainActivity"63 android:label="@string/app_name" >64 <intent-filter>65 <action android:name="android.intent.action.MAIN" />66 67 <category android:name="android.intent.category.LAUNCHER" />68 </intent-filter>69 </activity>70 71 <!-- 添加的內容 2 -->72 <meta-data73 android:name="com.baidu.lbsapi.API_KEY"74 android:value="Dt7Q30nVQMKbM3NT6GHnRnGq" />75 76 <service77 android:name="com.baidu.location.f"78 android:enabled="true"79 android:process=":remote" >80 </service>81 </application>82 83 </manifest>View Code
第三步: 申請 百度地圖開發密鑰:在上步中顯示的<meta_data >標籤的value屬性上設定
第四步:寫代碼擷取當前位置經緯度:代碼如下:
1 private LocationClient locClient; 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 //顯示介面之前初始化 BaiduMap SDK 8 SDKInitializer.initialize(getApplicationContext()); 9 setContentView(R.layout.activity_main);10 11 12 getLocation();13 }14 15 16 //擷取手機當前所在位置的經緯度17 public void getLocation(){18 //執行個體化位置用戶端19 locClient = new LocationClient(getApplicationContext());20 //建立一個位置option對象21 LocationClientOption locOption = new LocationClientOption();22 23 //設定option的屬性24 locOption.setCoorType("bd09II"); // bd09II表示返回的結果是百度的經緯度25 locOption.setIsNeedAddress(true); //返回的資訊包含當前的地址26 locOption.setNeedDeviceDirect(true); //返回的內容包含手機機頭的方向27 locOption.setScanSpan(5000); //每5秒發起一次定位請求28 locOption.setLocationMode(LocationMode.Hight_Accuracy); //高精度模式,網路和GPS29 30 31 //將封裝的參數設定到位置用戶端32 locClient.setLocOption(locOption);33 34 //給位置用戶端註冊位置監聽器35 locClient.registerLocationListener(new BDLocationListener() {36 37 @Override38 public void onReceiveLocation(BDLocation loc) {39 double latitude = loc.getLatitude();40 double longitude = loc.getLongitude();41 Toast.makeText(getApplicationContext(), latitude+":"+longitude, 0).show();42 43 /*================================此處定義介面=====================*/44 45 } 46 });47 48 //啟動位置用戶端49 locClient.start();50 51 }View Code