高德地图基本开发
先在高德地圖API上申請賬號,在之后申請一個key(這里就不說怎么申請了)
申請完KEY之后開始開發(fā)。
如下:?第一步:在build.gradle文件中,添加庫:
1 compile "com.amap.api:location:3.6.1" 2 compile 'com.amap.api:3dmap:latest.integration'?
第二步:在AndroidManifest.xml文件中添加對應的權限:
1 <uses-permission android:name="android.permission.INTERNET"/> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 3 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 4 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 5 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 6 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 7 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 8 <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 1 <meta-data 2 android:name="com.amap.api.v2.apikey" 3 android:value="16caa22bf22984714944c862cb580516"/> 4 <service android:name="com.amap.api.location.APSService"></service>第三步:在下面的二個文件中封裝了定位的api:
1 LocationClient.java (app\src\main\java\com\myos\camera\utils) 2 CameraLocationManager.java (app\src\main\java\com\myos\camera\activity)第四步:添加布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_test_location"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="android.com.debugdemo.TestLocation"><TextViewandroid:id="@+id/location"android:layout_width="wrap_content"android:layout_height="wrap_content"/><com.amap.api.maps.MapViewandroid:id="@+id/mapView"android:layout_below="@id/location"android:layout_width="match_parent"android:layout_height="match_parent"/> </RelativeLayout>第五步:實現(xiàn)邏輯
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.model.LatLng; import java.text.SimpleDateFormat; import java.util.Date;public class TestLocation extends AppCompatActivity implements LocationSource, AMapLocationListener{private static final String TAG = "TestLocation";private TextView location = null;private MapView mapView;private AMap aMap;private AMapLocationClient mLocationClient = null;private AMapLocationClientOption mLocationOption = null;private OnLocationChangedListener mListener = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.i(TAG,"onCreate()");super.onCreate(savedInstanceState);setContentView(R.layout.activity_test_location);init();// 創(chuàng)建地圖 mapView.onCreate(savedInstanceState);}private void init() {Log.i(TAG,"init()");location = (TextView) findViewById(R.id.location);mapView =(MapView) findViewById(R.id.mapView);if (aMap == null) {// 顯示地圖aMap = mapView.getMap();}aMap.getUiSettings().setZoomControlsEnabled(false);// 設置地圖默認的指南針是否顯示aMap.getUiSettings().setCompassEnabled(true);// 設置定位監(jiān)聽aMap.setLocationSource(this);// 設置默認定位按鈕是否顯示aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設置為true表示顯示定位層并可觸發(fā)定位,false表示隱藏定位層并不可觸發(fā)定位,默認是falseaMap.setMyLocationEnabled(true);aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);// 初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());// 設置高德地圖定位回調(diào)監(jiān)聽mLocationClient.setLocationListener(this);// 初始化AMapLocationClientOption對象mLocationOption = new AMapLocationClientOption();// 高精度定位模式:會同時使用網(wǎng)絡定位和GPS定位,優(yōu)先返回最高精度的定位結果,以及對應的地址描述信息// 設置定位模式為AMapLocationMode.Hight_Accuracy,高精度模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);// 低功耗定位模式:不會使用GPS和其他傳感器,只會使用網(wǎng)絡定位(Wi-Fi和基站定位);//設置定位模式為AMapLocationMode.Battery_Saving,低功耗模式。//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);// 僅用設備定位模式:不需要連接網(wǎng)絡,只使用GPS進行定位,這種模式下不支持室內(nèi)環(huán)境的定位,自 v2.9.0 版本支持返回地址描述信息。// 設置定位模式為AMapLocationMode.Device_Sensors,僅設備模式。//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);// SDK默認采用連續(xù)定位模式,時間間隔2000ms// 設置定位間隔,單位毫秒,默認為2000ms,最低1000ms。mLocationOption.setInterval(3000);// 設置定位同時是否需要返回地址描述//設置是否返回地址信息(默認返回地址信息)mLocationOption.setNeedAddress(true);// 設置是否強制刷新WIFI,默認為強制刷新。每次定位主動刷新WIFI模塊會提升WIFI定位精度,但相應的會多付出一些電量消耗。// 設置是否強制刷新WIFI,默認為true,強制刷新。mLocationOption.setWifiActiveScan(true);// 設置是否允許模擬軟件Mock位置結果,多為模擬GPS定位結果,默認為false,不允許模擬位置。// 設置是否允許模擬位置,默認為false,不允許模擬位置mLocationOption.setMockEnable(false);// 設置定位請求超時時間,默認為30秒// 單位是毫秒,默認30000毫秒,建議超時時間不要低于8000毫秒。mLocationOption.setHttpTimeOut(50000);// 設置是否開啟定位緩存機制// 緩存機制默認開啟,可以通過以下接口進行關閉。// 當開啟定位緩存功能,在高精度模式和低功耗模式下進行的網(wǎng)絡定位結果均會生成本地緩存,不區(qū)分單次定位還是連續(xù)定位。GPS定位結果不會被緩存。// 關閉緩存機制mLocationOption.setLocationCacheEnable(false);// 設置是否只定位一次,默認為falsemLocationOption.setOnceLocation(false);// 給定位客戶端對象設置定位參數(shù) mLocationClient.setLocationOption(mLocationOption);// 啟動高德地圖定位 mLocationClient.startLocation();}@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {Log.i(TAG,"onLocationChanged()");// 解析AMapLocation對象// 判斷AMapLocation對象不為空,當定位錯誤碼類型為0時定位成功if (aMapLocation != null) {Log.i(TAG,"onLocationChanged()--aMapLocation.getErrorCode():"+aMapLocation.getErrorCode());if (aMapLocation.getErrorCode() == 0) {int locationType = aMapLocation.getLocationType(); // 獲取當前定位結果來源,如網(wǎng)絡定位結果,詳見定位類型表double latitude= aMapLocation.getLatitude(); // 獲取緯度double longitude = aMapLocation.getLongitude(); // 獲取經(jīng)度float accuracy = aMapLocation.getAccuracy(); // 獲取精度信息String address = aMapLocation.getAddress(); // 地址,如果option中設置isNeedAddress為false,則沒有此結果,// 網(wǎng)絡定位結果中會有地址信息,GPS定位不返回地址信息。String country = aMapLocation.getCountry(); // 國家信息String province = aMapLocation.getProvince(); // 省信息String city = aMapLocation.getCity(); // 城市信息String district = aMapLocation.getDistrict(); // 城區(qū)信息String street = aMapLocation.getStreet(); // 街道信息String streetNum= aMapLocation.getStreetNum(); // 街道門牌號信息String cityCode = aMapLocation.getCityCode(); // 城市編碼String adCode = aMapLocation.getAdCode(); // 地區(qū)編碼String aoiName= aMapLocation.getAoiName(); // 獲取當前定位點的AOI信息String buildingId = aMapLocation.getBuildingId(); // 獲取當前室內(nèi)定位的建筑物IdString floor= aMapLocation.getFloor(); // 獲取當前室內(nèi)定位的樓層int gpsAccuracyStatus = aMapLocation.getGpsAccuracyStatus(); //獲取GPS的當前狀態(tài)// 獲取定位時間SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(aMapLocation.getTime());df.format(date);Log.i(TAG,"onLocationChanged()---"+"\n"+"--locationType:"+locationType +"\n"+"--latitude:"+latitude+"\n"+"--longitude:"+longitude+"\n"+"--accuracy:"+accuracy+"\n"+"--address:"+address+"\n"+"--country:"+country+"\n"+"--province:"+province+"\n"+"--city:"+city+"\n"+"--district:"+district+"\n"+"--street:"+street+"\n"+"--streetNum:"+streetNum+"\n"+"--cityCode:"+cityCode+"\n"+"--adCode:"+adCode+"\n"+"--aoiName:"+aoiName+"\n"+"--buildingId:"+buildingId+"\n"+"--floor:"+floor+"\n"+"--gpsAccuracyStatus:"+gpsAccuracyStatus+"\n"+"--date:"+date);// 設置縮放級別aMap.moveCamera(CameraUpdateFactory.zoomTo(17));// 將地圖移動到定位點 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));// 點擊定位按鈕 能夠?qū)⒌貓D的中心移動到定位點 mListener.onLocationChanged(aMapLocation);location.setText(address);} else {// 定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼表。Log.e("HLQ_Struggle", "location Error, ErrCode:"+ aMapLocation.getErrorCode() + ", errInfo:"+ aMapLocation.getErrorInfo());}}}@Overridepublic void onPointerCaptureChanged(boolean hasCapture) {Log.i(TAG,"onPointerCaptureChanged----hasCapture:"+hasCapture);}@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {Log.i(TAG,"activate()");mListener = onLocationChangedListener;}@Overridepublic void deactivate() {Log.i(TAG,"deactivate()");mListener = null;}@Overrideprotected void onResume() {Log.i(TAG,"onResume()");super.onResume();// 重新繪制加載地圖 mapView.onResume();}@Overrideprotected void onPause() {Log.i(TAG,"onPause()");super.onPause();// 暫停地圖的繪制 mapView.onPause();}@Overrideprotected void onDestroy() {Log.i(TAG,"onDestroy()");super.onDestroy();// 銷毀地圖 mapView.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {Log.i(TAG,"onSaveInstanceState()");super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);} }?
轉(zhuǎn)載于:https://www.cnblogs.com/zeminzhang/p/9303171.html
總結
- 上一篇: 平安银行境外取现需要注意什么
- 下一篇: 股权激励的四种主要模式 上市公司都