Android高德地圖的定位

來源:互聯網
上載者:User

標籤:

看注釋解析基本上OK了。

布局,許可權:

<!--用於進行網路定位-->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>    <!--用於訪問GPS定位-->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>    <!--擷取電訊廠商資訊,用於支援提供電訊廠商資訊相關的介面-->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>    <!--用於訪問wifi網路資訊,wifi資訊會用於進行網路定位-->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>    <!--這個許可權用於擷取wifi的擷取許可權,wifi資訊會用來進行網路定位-->    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>    <!--用於訪問網路,網路定位需要上網-->    <uses-permission android:name="android.permission.INTERNET"></uses-permission>    <!--用於讀取手機當前的狀態-->    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>    <!--寫入擴充儲存,向擴充卡寫入資料,用於寫入緩衝定位元據-->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<meta-data android:name="com.amap.api.v2.apikey" android:value="你的key"/><service android:name="com.amap.api.location.APSService"></service>
<com.amap.api.maps.MapView        android:id="@+id/map"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_below="@+id/my_location">    </com.amap.api.maps.MapView>
public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener {    private AMap aMap;    private OnLocationChangedListener  mListener;    private MapView mMapView;    //聲明AMapLocationClient類對象    public AMapLocationClient mapLocationClient;    //聲明AMapLocationClientOption對象    public AMapLocationClientOption mapLocationClientOption;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        getSupportActionBar().hide();        setContentView(R.layout.activity_main);        mMapView = (MapView)findViewById(R.id.map);        //在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),實現地圖生命週期管理        mMapView.onCreate(savedInstanceState);        if (aMap==null){            aMap = mMapView.getMap();        }        aMap.setLocationSource(this);// 設定定位監聽        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設定預設定位按鈕是否顯示        // 設定為true表示顯示定位層並可觸發定位,false表示隱藏定位層並不可觸發定位,預設是false        aMap.setMyLocationEnabled(true);        // 設定定位的類型為定位元模式 ,可以由定位、跟隨或地圖根據面向方向旋轉幾種        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);    }    @Override    protected void onDestroy() {        super.onDestroy();        //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理        mMapView.onDestroy();        mapLocationClient.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity執行onResume時執行mMapView.onResume (),實現地圖生命週期管理        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity執行onPause時執行mMapView.onPause (),實現地圖生命週期管理        mMapView.onPause();    }    @Override    protected void onStop() {        super.onStop();        mapLocationClient.stopLocation();    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),實現地圖生命週期管理        mMapView.onSaveInstanceState(outState);    }    @Override    public void onLocationChanged(AMapLocation aMapLocation) {        if (aMapLocation!=null){            if (aMapLocation.getErrorCode()==0){                mListener.onLocationChanged(aMapLocation);// 顯示系統小藍點                StringBuilder stringBuilder = new StringBuilder();                //定位成功回調資訊,設定相關訊息                int type = aMapLocation.getLocationType();                String address = aMapLocation.getAddress();                stringBuilder.append(type+address);                Toast.makeText(this,stringBuilder.toString(),Toast.LENGTH_SHORT).show();            }else {                //顯示錯誤資訊ErrCode是錯誤碼,errInfo是錯誤資訊,詳見下方錯誤碼錶。                Log.i("erro info:",aMapLocation.getErrorCode()+"---"+aMapLocation.getErrorInfo());            }        }    }    //啟用定位    @Override    public void activate(OnLocationChangedListener onLocationChangedListener) {        mListener = onLocationChangedListener;        if (mapLocationClient==null){            //初始化AMapLocationClient,並綁定監聽            mapLocationClient = new AMapLocationClient(getApplicationContext());            //初始化定位參數            mapLocationClientOption = new AMapLocationClientOption();            //設定定位精度            mapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);            //是否返回地址資訊            mapLocationClientOption.setNeedAddress(true);            //是否只定位一次            mapLocationClientOption.setOnceLocation(false);            //設定是否強制重新整理WIFI,預設為強制重新整理            mapLocationClientOption.setWifiActiveScan(true);            //是否允許類比位置            mapLocationClientOption.setMockEnable(false);            //定位時間間隔            mapLocationClientOption.setInterval(2000);            //給定位用戶端對象設定定位參數            mapLocationClient.setLocationOption(mapLocationClientOption);            //綁定監聽            mapLocationClient.setLocationListener(this);            //開啟定位            mapLocationClient.startLocation();        }    }    //停止定位    @Override    public void deactivate() {        mListener = null;        if (mapLocationClient!=null){            mapLocationClient.stopLocation();            mapLocationClient.onDestroy();        }        mapLocationClient = null;    }    /**     0  定位成功。     1  一些重要參數為空白,如context;請對定位傳遞的參數進行非空判斷。     2  定位失敗,由於僅掃描到單個wifi,且沒有基站資訊。     3  擷取到的請求參數為空白,可能擷取過程中出現異常。     4  請求伺服器過程中的異常,多為網路情況差,鏈路不通導致,請檢查裝置網路是否通暢。     5  返回的XML格式錯誤,解析失敗。     6  定位服務返回定位失敗,如果出現該異常,請將errorDetail資訊通過[email protected]反饋給我們。     7  KEY建權失敗,請仔細檢查key綁定的sha1值與apk簽名sha1值是否對應。     8  Android exception通用錯誤,請將errordetail資訊通過[email protected]反饋給我們。     9  定位初始化時出現異常,請重新啟動定位。     10     定位用戶端啟動失敗,請檢查AndroidManifest.xml檔案是否配置了APSService定位服務     11     定位時的基站資訊錯誤,請檢查是否安裝SIM卡,裝置很有可能連入了偽基站網路。     12     缺少定位許可權,請在裝置的設定中開啟app的定位許可權。     **/}

Android高德地圖的定位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.