Android简单实现百度地图显示及定位
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Android简单实现百度地图显示及定位
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                1、下載百度地圖的SDK 
 下載地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download 
 2、申請(qǐng)key值 
 注冊(cè)百度賬號(hào)——>登錄百度地圖官網(wǎng)——>控制臺(tái)—–>創(chuàng)建應(yīng)用 
 獲取key(也就是AK)的具體方法的官網(wǎng)地址 :http://lbsyun.baidu.com/apiconsole/key 
 3、通過(guò)解壓得到.jar文件并放到libs文件中,手動(dòng)添加到依賴庫(kù)中(右鍵Add—-) 
 4、在src/main下建立一個(gè)叫做jniLibs的文件夾,并把解壓后內(nèi)的文件夾靠進(jìn)去,如下圖: 
 
代碼實(shí)現(xiàn)
在工程的“ AndroidManifest.xml ”文件添加key和Service
//配置應(yīng)用的AppKey,唯一的,需申請(qǐng)<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="你的 key" /> //service組件,固定配置<serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service>添加權(quán)限(6.0權(quán)限另說(shuō))
//獲取設(shè)備網(wǎng)絡(luò)狀態(tài),禁用后無(wú)法獲取網(wǎng)絡(luò)狀態(tài)<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />//網(wǎng)絡(luò)權(quán)限,當(dāng)禁用后,無(wú)法進(jìn)行檢索等相關(guān)業(yè)務(wù)<uses-permission android:name="android.permission.INTERNET" />//讀取設(shè)備硬件信息,統(tǒng)計(jì)數(shù)據(jù)<uses-permission android:name="android.permission.READ_PHONE_STATE" />//讀取系統(tǒng)信息,包含系統(tǒng)版本等信息,用作統(tǒng)計(jì)<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />//獲取設(shè)備的網(wǎng)絡(luò)狀態(tài),鑒權(quán)所需網(wǎng)絡(luò)代理<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />//允許sd卡寫(xiě)權(quán)限,需寫(xiě)入地圖數(shù)據(jù),禁用后無(wú)法顯示地圖<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />//允許sd卡讀權(quán)限,需讀取地圖數(shù)據(jù),禁用后無(wú)法顯示地圖<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />//獲取統(tǒng)計(jì)數(shù)據(jù)<uses-permission android:name="android.permission.WRITE_SETTINGS" />//鑒權(quán)所需該權(quán)限獲取進(jìn)程列表<uses-permission android:name="android.permission.GET_TASKS" />//使用步行AR導(dǎo)航,配置Camera權(quán)限<uses-permission android:name="android.permission.CAMERA" />//網(wǎng)絡(luò)定位<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />//GPS定位<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 這個(gè)權(quán)限用于獲取wifi的獲取權(quán)限,wifi信息會(huì)用來(lái)進(jìn)行網(wǎng)絡(luò)定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />activity.xml布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.baidu_demo1.MainActivity"><com.baidu.mapapi.map.MapView android:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/ll"android:clickable="true"></com.baidu.mapapi.map.MapView><LinearLayout android:id="@+id/ll"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:orientation="horizontal"><Button android:id="@+id/bt"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="復(fù)位" /><Button android:id="@+id/button"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="衛(wèi)星" /><Button android:id="@+id/buttons"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="普通" /></LinearLayout></RelativeLayout>Mainactivity.java代碼實(shí)現(xiàn)
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast;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.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private MapView mMapView;private BaiduMap mBaiduMap;public LocationClient mLocationClient;public BDLocationListener myListener = new MyLocationListener();private Button bt;private Button button;private Button buttons;private LatLng latLng;private boolean isFirstLoc = true; // 是否首次定位@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各組件之前初始化context信息,傳入ApplicationContext//注意該方法要再setContentView方法之前實(shí)現(xiàn)SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);initView();initMap();}private void initMap() {//獲取地圖控件引用mBaiduMap = mMapView.getMap();//普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);mBaiduMap.setMyLocationEnabled(true);//默認(rèn)顯示普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//開(kāi)啟交通圖//mBaiduMap.setTrafficEnabled(true);//開(kāi)啟熱力圖//mBaiduMap.setBaiduHeatMapEnabled(true);// 開(kāi)啟定位圖層mBaiduMap.setMyLocationEnabled(true);mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類//配置定位SDK參數(shù)initLocation();mLocationClient.registerLocationListener(myListener); //注冊(cè)監(jiān)聽(tīng)函數(shù)//開(kāi)啟定位mLocationClient.start();//圖片點(diǎn)擊事件,回到定位點(diǎn)mLocationClient.requestLocation();}//配置定位SDK參數(shù)private void initLocation() {LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可選,默認(rèn)高精度,設(shè)置定位模式,高精度,低功耗,僅設(shè)備option.setCoorType("bd09ll");//可選,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系int span = 1000;option.setScanSpan(span);//可選,默認(rèn)0,即僅定位一次,設(shè)置發(fā)起定位請(qǐng)求的間隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認(rèn)不需要option.setOpenGps(true);//可選,默認(rèn)false,設(shè)置是否使用gpsoption.setLocationNotify(true);//可選,默認(rèn)false,設(shè)置是否當(dāng)GPS有效時(shí)按照1S/1次頻率輸出GPS結(jié)果option.setIsNeedLocationDescribe(true);//可選,默認(rèn)false,設(shè)置是否需要位置語(yǔ)義化結(jié)果,可以在BDLocation// .getLocationDescribe里得到,結(jié)果類似于“在北京天安門(mén)附近”option.setIsNeedLocationPoiList(true);//可選,默認(rèn)false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);option.setOpenGps(true); // 打開(kāi)gps//可選,默認(rèn)true,定位SDK內(nèi)部是一個(gè)SERVICE,并放到了獨(dú)立進(jìn)程,設(shè)置是否在stop的時(shí)候殺死這個(gè)進(jìn)程,默認(rèn)不殺死option.SetIgnoreCacheException(false);//可選,默認(rèn)false,設(shè)置是否收集CRASH信息,默認(rèn)收集option.setEnableSimulateGps(false);//可選,默認(rèn)false,設(shè)置是否需要過(guò)濾GPS仿真結(jié)果,默認(rèn)需要mLocationClient.setLocOption(option);}//實(shí)現(xiàn)BDLocationListener接口,BDLocationListener為結(jié)果監(jiān)聽(tīng)接口,異步獲取定位結(jié)果public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {latLng = new LatLng(location.getLatitude(), location.getLongitude());// 構(gòu)造定位數(shù)據(jù)MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設(shè)置開(kāi)發(fā)者獲取到的方向信息,順時(shí)針0-360.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();// 設(shè)置定位數(shù)據(jù)mBaiduMap.setMyLocationData(locData);// 當(dāng)不需要定位圖層時(shí)關(guān)閉定位圖層//mBaiduMap.setMyLocationEnabled(false);if (isFirstLoc) {isFirstLoc = false;LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatus.Builder builder = new MapStatus.Builder();builder.target(ll).zoom(18.0f);mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位結(jié)果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 網(wǎng)絡(luò)定位結(jié)果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結(jié)果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeServerError) {Toast.makeText(MainActivity.this, "服務(wù)器錯(cuò)誤,請(qǐng)檢查", Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeNetWorkException) {Toast.makeText(MainActivity.this, "網(wǎng)絡(luò)錯(cuò)誤,請(qǐng)檢查", Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeCriteriaException) {Toast.makeText(MainActivity.this, "手機(jī)模式錯(cuò)誤,請(qǐng)檢查是否飛行", Toast.LENGTH_SHORT).show();}}}}private void initView() {mMapView = (MapView) findViewById(R.id.bmapView);bt = (Button) findViewById(R.id.bt);bt.setOnClickListener(this);button = (Button) findViewById(R.id.button);button.setOnClickListener(this);buttons = (Button) findViewById(R.id.buttons);buttons.setOnClickListener(this);}@Overrideprotected void onDestroy() {super.onDestroy();//在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy(),實(shí)現(xiàn)地圖生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity執(zhí)行onResume時(shí)執(zhí)行mMapView. onResume (),實(shí)現(xiàn)地圖生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity執(zhí)行onPause時(shí)執(zhí)行mMapView. onPause (),實(shí)現(xiàn)地圖生命周期管理mMapView.onPause();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt://把定位點(diǎn)再次顯現(xiàn)出來(lái)MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(mapStatusUpdate);break;case R.id.button://衛(wèi)星地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.buttons://普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;}}}就是這么簡(jiǎn)單,希望留言討論,謝謝!!!
總結(jié)
以上是生活随笔為你收集整理的Android简单实现百度地图显示及定位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 曾以为只能拿8K,22届学弟字节校招心路
- 下一篇: 前端学习(3222):函数式组件使用pr
