溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

百度地圖定位功能實(shí)現(xiàn)v3_0_0

發(fā)布時(shí)間:2020-07-12 01:11:03 來(lái)源:網(wǎng)絡(luò) 閱讀:470 作者:迷途不迷糊 欄目:移動(dòng)開發(fā)


對(duì)于初學(xué)者來(lái)說(shuō),首先得先注意,不同的jar版本,方法也不同,之前不知道,糾結(jié)了很久

xml布局


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >


    <com.baidu.mapapi.map.MapView

        android:id="@+id/mapView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent" />


</LinearLayout>

menu布局


<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item

        android:id="@+id/id_menu_map_common"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="普通地圖"/>

    <item

        android:id="@+id/id_menu_map_site"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="衛(wèi)星地圖"/>

    <item

        android:id="@+id/id_menu_map_myLoc"

        android:icon="@drawable/ic_launcher"

        android:showAsAction="never"

        android:title="我的位置"/>


</menu>

<!-- android版本支持 -->

    <supports-screens

        android:anyDensity="true"

        android:largeScreens="true"

        android:normalScreens="true"

        android:resizeable="true"

        android:smallScreens="true" />

<!-- 百度定位服務(wù) -->

        <service

            android:name="com.baidu.location.f"

            android:enabled="true"

            android:process=":remote" >

        </service>

<!-- 百度地圖權(quán)限 -->

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

Activity方法實(shí)現(xiàn)


import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.Window;

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.mapapi.SDKInitializer;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MyLocationConfigeration;

import com.baidu.mapapi.map.MyLocationData;

import com.baidu.mapapi.map.MyLocationConfigeration.LocationMode;

import com.baidu.mapapi.model.LatLng;


public class MyMapActivity extends Activity {


private MapView mMapView;

private BaiduMap baiduMap;

/** 定位 */

private LocationClient myLocation;

/** 定位監(jiān)聽器 */

public MyLocationListener myLocationListener;

/** 當(dāng)前緯度 */

private double mCurrentLatitude;

/** 當(dāng)前經(jīng)度 */

private double mCurrentLongitude;

/**

* 當(dāng)前定位的模式

*/

private LocationMode mCurrentMode = LocationMode.NORMAL;

/***

* 是否是第一次定位

*/

private volatile boolean isFristLocation = true;

private boolean flag = false;


@Override

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);

// 在使用SDK各組件之前初始化context信息,傳入ApplicationContext

// 注意該方法要再setContentView方法之前實(shí)現(xiàn)

requestWindowFeature(Window.FEATURE_NO_TITLE);

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_map);

init();

initMyLocation();

}


/**

* 初始化方法

*/

private void init() {

mMapView = (MapView) findViewById(R.id.mapView);

baiduMap = mMapView.getMap();

if (flag) {

// 設(shè)置顯示的地圖模式為衛(wèi)星地圖

baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

} else {

// 設(shè)置顯示的地圖模式為普通模式

baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

}

MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(15.0f);

baiduMap.setMapStatus(update);


}


/**

* 初始化定位相關(guān)代碼

*/

private void initMyLocation() {

// 定位初始化

myLocation = new LocationClient(this);

myLocationListener = new MyLocationListener();

myLocation.registerLocationListener(myLocationListener);

// 設(shè)置定位的相關(guān)配置

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);

// 返回的定位結(jié)果是百度經(jīng)緯度,默認(rèn)值gcj02(國(guó)測(cè)局加密經(jīng)緯度坐標(biāo)),其他bd09ll(百度加密經(jīng)緯度坐標(biāo)),bd09ll(百度加密經(jīng)緯度坐標(biāo))

option.setCoorType("gcj02");

// 設(shè)置發(fā)起定位請(qǐng)求的間隔時(shí)間

option.setScanSpan(1000);

// 反編譯地址

myLocation.setLocOption(option);

}


/**

* 實(shí)現(xiàn)定位回調(diào)監(jiān)聽

* @author Administrator

*/

private class MyLocationListener implements BDLocationListener {


@Override

public void onReceiveLocation(BDLocation location) {


if (location == null || mMapView == null)

return;

/** 構(gòu)造定位數(shù)據(jù) */

MyLocationData locationData = new MyLocationData.Builder()

.accuracy(location.getRadius())

/** 緯度 */

.latitude(location.getLatitude())

/** 經(jīng)度 */

.longitude(location.getLongitude()).build();

/** 設(shè)置定位數(shù)據(jù) */

baiduMap.setMyLocationData(locationData);

/** 當(dāng)前的緯度 */

mCurrentLatitude = location.getLatitude();

/** 當(dāng)前的經(jīng)度 */

mCurrentLongitude = location.getLongitude();

/** 設(shè)置自定義標(biāo)記 */

BitmapDescriptor currentMarker = BitmapDescriptorFactory

.fromResource(R.drawable.marker);

MyLocationConfigeration configeration = new MyLocationConfigeration(

mCurrentMode, true, currentMarker);

baiduMap.setMyLocationConfigeration(configeration);

/** 第一次定位時(shí),將地圖位置移動(dòng)到當(dāng)前位置 */

if (isFristLocation) {

isFristLocation = false;

LatLng ll = new LatLng(location.getLatitude(),

location.getLongitude());

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

baiduMap.animateMapStatus(u);

}

}

}


@Override

protected void onResume() {

// MapView的生命周期與Activity同步,當(dāng)activity掛起時(shí)需調(diào)用MapView.onPause()

super.onResume();

mMapView.onResume();

}


@Override

protected void onPause() {

// MapView的生命周期與Activity同步,當(dāng)activity掛起時(shí)需調(diào)用MapView.onPause()

super.onPause();

mMapView.onPause();

}


@Override

protected void onDestroy() {

// MapView的生命周期與Activity同步,當(dāng)activity銷毀時(shí)需調(diào)用MapView.destroy()

mMapView.onDestroy();

mMapView = null;

super.onDestroy();

}


@Override

protected void onStart() {


baiduMap.setMyLocationEnabled(true);

if (!myLocation.isStarted()) {

myLocation.start();

}

super.onStart();

}


@Override

protected void onStop() {

// 關(guān)閉圖層定位

baiduMap.setMyLocationEnabled(false);

myLocation.stop();

super.onStop();

}


/**

* 地圖移動(dòng)到我的位置,此處可以重新發(fā)定位請(qǐng)求,然后定位; 直接拿最近一次經(jīng)緯度,如果長(zhǎng)時(shí)間沒有定位成功,可能會(huì)顯示效果不好

*/

private void center2myLoc() {

LatLng ll = new LatLng(mCurrentLatitude, mCurrentLongitude);

MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

baiduMap.animateMapStatus(u);

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.mode, menu);

return true;

}


@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

// 普通地圖

case R.id.id_menu_map_common:

baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

break;

// 衛(wèi)星地圖

case R.id.id_menu_map_site:

baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);

break;

// 我的位置

case R.id.id_menu_map_myLoc:

center2myLoc();

break;

}


return super.onOptionsItemSelected(item);

}

}




向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI