1.申請key值
2.權(quán)限
<!--用于進(jìn)行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>? ? <!--用于訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>? ? <!--用于獲取運營商信息,用于支持提供運營商信息相關(guān)的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>? ? <!--用于訪問wifi網(wǎng)絡(luò)信息簿煌,wifi信息會用于進(jìn)行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>? ? <!--用于獲取wifi的獲取權(quán)限澈圈,wifi信息會用來進(jìn)行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>? ? <!--用于訪問網(wǎng)絡(luò),網(wǎng)絡(luò)定位需要上網(wǎng)-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>? ? <!--用于讀取手機(jī)當(dāng)前的狀態(tài)-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>? ? <!--用于寫入緩存數(shù)據(jù)到擴(kuò)展存儲卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>? ? <!--用于申請調(diào)用A-GPS模塊-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>? ? <!--用于申請獲取藍(lán)牙信息進(jìn)行室內(nèi)定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
3.配置清單文件
4.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
? ? xmlns:app="http://schemas.android.com/apk/res-auto"
? ? xmlns:tools="http://schemas.android.com/tools"
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? tools:context=".MainActivity">
? ? <com.amap.api.maps.MapView
? ? ? ? android:id="@+id/map"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
6.代碼
package com.qgs.gd;
import android.graphics.Color;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
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.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.MyLocationStyle;
public class MainActivity extends AppCompatActivity implements AMapLocationListener,LocationSource {
? ? private MapView mapView;
? ? private MyLocationStyle mMyLocationStyle;
? ? AMap aMap;
? ? OnLocationChangedListener mListener;
? ? AMapLocationClient mlocationClient;
? ? AMapLocationClientOption mLocationOption;
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_main);
? ? ? ? mapView = findViewById(R.id.map);
? ? ? ? mapView.onCreate(savedInstanceState);
? ? ? ? if (aMap == null) {
? ? ? ? ? ? aMap = mapView.getMap();
? ? ? ? }
? ? ? ? initLocation();
? ? }
? ? private void initLocation() {
? ? ? ? mMyLocationStyle = new MyLocationStyle();//初始化定位藍(lán)點樣式類
? ? ? ? aMap.getUiSettings().setMyLocationButtonEnabled(true);//設(shè)置默認(rèn)定位按鈕是否顯示启上,非必需設(shè)置。
//? ? ? ? myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
//? ? ? ? myLocationStyle.interval(5000L); //設(shè)置連續(xù)定位模式下的定位間隔,只在連續(xù)定位模式下生效,單次定位模式下不會生效格粪。單位為毫秒。
? ? ? ? mMyLocationStyle.strokeColor(Color.parseColor("#2c78c2"));
? ? ? ? mMyLocationStyle.radiusFillColor(Color.parseColor("#A6FFFFFF"));
? ? ? ? aMap.setMyLocationStyle(mMyLocationStyle);//設(shè)置定位藍(lán)點的Style
? ? ? ? CameraUpdate cameraUpdate = CameraUpdateFactory.zoomTo(18);//縮放級別
? ? ? ? aMap.moveCamera(cameraUpdate);
? ? ? ? // 設(shè)置定位監(jiān)聽
? ? ? ? aMap.setLocationSource(this);
? ? ? ? // 設(shè)置為true表示顯示定位層并可觸發(fā)定位氛改,false表示隱藏定位層并不可觸發(fā)定位匀借,默認(rèn)是false
? ? ? ? aMap.setMyLocationEnabled(true);
? ? ? ? // 設(shè)置定位的類型為定位模式,有定位平窘、跟隨或地圖根據(jù)面向方向旋轉(zhuǎn)幾種
? ? ? ? aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
? ? }
? ? @Override
? ? protected void onResume() {
? ? ? ? super.onResume();
? ? ? ? mapView.onResume();
? ? }
? ? @Override
? ? protected void onPause() {
? ? ? ? super.onPause();
? ? ? ? mapView.onPause();
? ? }
? ? @Override
? ? protected void onSaveInstanceState(Bundle outState) {
? ? ? ? super.onSaveInstanceState(outState);
? ? ? ? mapView.onSaveInstanceState(outState);
? ? }
? ? @Override
? ? public void onLocationChanged(AMapLocation aMapLocation) {
? ? ? ? Log.e("===" + aMapLocation.getLatitude(), "====" + aMapLocation.getLongitude());
? ? ? ? if (mListener != null && aMapLocation != null) {
? ? ? ? ? ? if (aMapLocation != null
? ? ? ? ? ? ? ? ? ? && aMapLocation.getErrorCode() == 0) {
? ? ? ? ? ? ? ? mListener.onLocationChanged(aMapLocation);// 顯示系統(tǒng)小藍(lán)點
? ? ? ? ? ? ? ? String country = aMapLocation.getCountry();//國家信息
? ? ? ? ? ? ? ? String city = aMapLocation.getCity();//獲取城市
? ? ? ? ? ? ? ? double tude = aMapLocation.getLatitude();//維度
? ? ? ? ? ? ? ? double longitude = aMapLocation.getLongitude();//經(jīng)度
? ? ? ? ? ? ? ? String city_code = aMapLocation.getCityCode();
? ? ? ? ? ? ? ? String dis = aMapLocation.getDistrict();//城區(qū)信息
? ? ? ? ? ? ? ? String street = aMapLocation.getStreet();//街道信息
? ? ? ? ? ? ? ? String num = aMapLocation.getStreetNum();//街道門牌號信息
? ? ? ? ? ? ? ? aMapLocation.getLocationType();//獲取當(dāng)前定位結(jié)果來源吓肋,如網(wǎng)絡(luò)定位結(jié)果,詳見定位類型表
? ? ? ? ? ? ? ? aMapLocation.getLatitude();//獲取緯度
? ? ? ? ? ? ? ? aMapLocation.getLongitude();//獲取經(jīng)度
? ? ? ? ? ? ? ? aMapLocation.getAccuracy();//獲取精度信息
? ? ? ? ? ? ? ? aMapLocation.getAddress();//地址瑰艘,如果option中設(shè)置isNeedAddress為false是鬼,則沒有此結(jié)果,網(wǎng)絡(luò)定位結(jié)果中會有地址信息紫新,GPS定位不返回地址信息均蜜。
? ? ? ? ? ? ? ? aMapLocation.getCountry();//國家信息
? ? ? ? ? ? ? ? aMapLocation.getProvince();//省信息
? ? ? ? ? ? ? ? aMapLocation.getCity();//城市信息
? ? ? ? ? ? ? ? aMapLocation.getDistrict();//城區(qū)信息
? ? ? ? ? ? ? ? aMapLocation.getStreet();//街道信息
? ? ? ? ? ? ? ? aMapLocation.getStreetNum();//街道門牌號信息
? ? ? ? ? ? ? ? aMapLocation.getCityCode();//城市編碼
? ? ? ? ? ? ? ? aMapLocation.getAdCode();//地區(qū)編碼
? ? ? ? ? ? ? ? Toast.makeText(MainActivity.this, country + "==" + city +"=="+street+ "==="+dis +"=="+num+ city_code + "==" + tude + "===" + longitude, Toast.LENGTH_SHORT).show();
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? String errText = "定位失敗," + aMapLocation.getErrorCode() + ": " + aMapLocation.getErrorInfo();
? ? ? ? ? ? ? ? Log.e("AmapErr", errText);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? @Override
? ? public void activate(OnLocationChangedListener onLocationChangedListener) {
? ? ? ? mListener = onLocationChangedListener;
? ? ? ? if (mlocationClient == null) {
? ? ? ? ? ? //初始化定位
? ? ? ? ? ? mlocationClient = new AMapLocationClient(this);
? ? ? ? ? ? //初始化定位參數(shù)
? ? ? ? ? ? mLocationOption = new AMapLocationClientOption();
? ? ? ? ? ? //設(shè)置定位回調(diào)監(jiān)聽
? ? ? ? ? ? mlocationClient.setLocationListener(this);
? ? ? ? ? ? //設(shè)置為高精度定位模式
? ? ? ? ? ? mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
? ? ? ? ? ? //設(shè)置定位參數(shù)
? ? ? ? ? ? mlocationClient.setLocationOption(mLocationOption);
? ? ? ? ? ? // 此方法為每隔固定時間會發(fā)起一次定位請求,為了減少電量消耗或網(wǎng)絡(luò)流量消耗芒率,
? ? ? ? ? ? // 注意設(shè)置合適的定位時間的間隔(最小間隔支持為2000ms)囤耳,并且在合適時間調(diào)用stopLocation()方法來取消定位請求
? ? ? ? ? ? mLocationOption.setInterval(2000L);
? ? ? ? ? ? // 在定位結(jié)束后,在合適的生命周期調(diào)用onDestroy()方法
? ? ? ? ? ? // 在單次定位情況下,定位無論成功與否充择,都無需調(diào)用stopLocation()方法移除請求德玫,定位sdk內(nèi)部會移除
? ? ? ? ? ? mlocationClient.startLocation();//啟動定位
? ? ? ? }
? ? }
? ? @Override
? ? public void deactivate() {
? ? ? ? mListener = null;
? ? ? ? if (mlocationClient != null) {
? ? ? ? ? ? mlocationClient.stopLocation();
? ? ? ? ? ? mlocationClient.onDestroy();
? ? ? ? }
? ? ? ? mlocationClient = null;
? ? }
? ? @Override
? ? protected void onDestroy() {
? ? ? ? super.onDestroy();
? ? ? ? super.onDestroy();
? ? ? ? //在activity執(zhí)行onDestroy時執(zhí)行mMapView.onDestroy(),銷毀地圖
? ? ? ? mapView.onDestroy();
? ? ? ? if(null != mlocationClient){
? ? ? ? ? ? mlocationClient.onDestroy();
? ? ? ? }
? ? }
}