日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android简单实现百度地图显示及定位

發布時間:2023/12/9 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android简单实现百度地图显示及定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、下載百度地圖的SDK
下載地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
2、申請key值
注冊百度賬號——>登錄百度地圖官網——>控制臺—–>創建應用
獲取key(也就是AK)的具體方法的官網地址 :http://lbsyun.baidu.com/apiconsole/key
3、通過解壓得到.jar文件并放到libs文件中,手動添加到依賴庫中(右鍵Add—-)
4、在src/main下建立一個叫做jniLibs的文件夾,并把解壓后內的文件夾靠進去,如下圖:

代碼實現

在工程的“ AndroidManifest.xml ”文件添加key和Service

//配置應用的AppKey,唯一的,需申請<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>

添加權限(6.0權限另說)

//獲取設備網絡狀態,禁用后無法獲取網絡狀態<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />//網絡權限,當禁用后,無法進行檢索等相關業務<uses-permission android:name="android.permission.INTERNET" />//讀取設備硬件信息,統計數據<uses-permission android:name="android.permission.READ_PHONE_STATE" />//讀取系統信息,包含系統版本等信息,用作統計<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />//獲取設備的網絡狀態,鑒權所需網絡代理<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />//允許sd卡寫權限,需寫入地圖數據,禁用后無法顯示地圖<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />//允許sd卡讀權限,需讀取地圖數據,禁用后無法顯示地圖<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />//獲取統計數據<uses-permission android:name="android.permission.WRITE_SETTINGS" />//鑒權所需該權限獲取進程列表<uses-permission android:name="android.permission.GET_TASKS" />//使用步行AR導航,配置Camera權限<uses-permission android:name="android.permission.CAMERA" />//網絡定位<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />//GPS定位<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 這個權限用于獲取wifi的獲取權限,wifi信息會用來進行網絡定位--><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="復位" /><Button android:id="@+id/button"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="衛星" /><Button android:id="@+id/buttons"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="普通" /></LinearLayout></RelativeLayout>

Mainactivity.java代碼實現

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方法之前實現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);//默認顯示普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);//開啟交通圖//mBaiduMap.setTrafficEnabled(true);//開啟熱力圖//mBaiduMap.setBaiduHeatMapEnabled(true);// 開啟定位圖層mBaiduMap.setMyLocationEnabled(true);mLocationClient = new LocationClient(getApplicationContext()); //聲明LocationClient類//配置定位SDK參數initLocation();mLocationClient.registerLocationListener(myListener); //注冊監聽函數//開啟定位mLocationClient.start();//圖片點擊事件,回到定位點mLocationClient.requestLocation();}//配置定位SDK參數private void initLocation() {LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果坐標系int span = 1000;option.setScanSpan(span);//可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可選,設置是否需要地址信息,默認不需要option.setOpenGps(true);//可選,默認false,設置是否使用gpsoption.setLocationNotify(true);//可選,默認false,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果option.setIsNeedLocationDescribe(true);//可選,默認false,設置是否需要位置語義化結果,可以在BDLocation// .getLocationDescribe里得到,結果類似于“在北京天安門附近”option.setIsNeedLocationPoiList(true);//可選,默認false,設置是否需要POI結果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);option.setOpenGps(true); // 打開gps//可選,默認true,定位SDK內部是一個SERVICE,并放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾GPS仿真結果,默認需要mLocationClient.setLocOption(option);}//實現BDLocationListener接口,BDLocationListener為結果監聽接口,異步獲取定位結果public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {latLng = new LatLng(location.getLatitude(), location.getLongitude());// 構造定位數據MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設置開發者獲取到的方向信息,順時針0-360.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();// 設置定位數據mBaiduMap.setMyLocationData(locData);// 當不需要定位圖層時關閉定位圖層//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定位結果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 網絡定位結果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 離線定位結果Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeServerError) {Toast.makeText(MainActivity.this, "服務器錯誤,請檢查", Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeNetWorkException) {Toast.makeText(MainActivity.this, "網絡錯誤,請檢查", Toast.LENGTH_SHORT).show();} else if (location.getLocType() == BDLocation.TypeCriteriaException) {Toast.makeText(MainActivity.this, "手機模式錯誤,請檢查是否飛行", 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執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity執行onPause時執行mMapView. onPause (),實現地圖生命周期管理mMapView.onPause();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt://把定位點再次顯現出來MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(mapStatusUpdate);break;case R.id.button://衛星地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.buttons://普通地圖mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;}}}

就是這么簡單,希望留言討論,謝謝!!!

總結

以上是生活随笔為你收集整理的Android简单实现百度地图显示及定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。