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

歡迎訪問 生活随笔!

生活随笔

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

Android

使用百度Android地图SDK显示地图定位

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

? ? ? ? 同樣參考:百度Android地圖SDK官方文檔

? ? ? ? 建議使用Android Studio3.0版本,最初我使用書中的2.0版本,導入BaiduLBS_Android.jar庫之后報出各種錯誤,改一個就會出現另一個錯誤。于是下了一個AS3.5.0版本,并按照百度開發者文檔中所要求的步驟成功移植庫。

? ? ? ?此案例是在上一個定位的案例的基礎上修改的,具體查看:使用百度API獲取位置信息

一、配置AndroidManifest.xml文件

? ? ? ?由于不僅要顯示地圖,還要定位,所以我們的權限有點多。其中顯示地圖的權限為:

<!-- 訪問網絡,進行地圖相關業務數據請求,包括地圖數據,路線規劃,POI檢索等 --><uses-permission android:name="android.permission.INTERNET" /><!-- 獲取網絡狀態,根據網絡狀態切換進行數據請求網絡轉換 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 讀取外置存儲。如果開發者使用了so動態加載功能并且把so文件放在了外置存儲區域,則需要申請該權限,否則不需要 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 寫外置存儲。如果開發者使用了離線地圖,并且數據寫在外置存儲區域,則需要申請該權限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

地圖上顯示定位的權限:

? <!-- 這個權限用于進行網絡定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 這個權限用于訪問GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />?

最終的AndroidManifest.xml文件為

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.lbstest"><!-- 訪問網絡,進行地圖相關業務數據請求,包括地圖數據,路線規劃,POI檢索等 --><uses-permission android:name="android.permission.INTERNET" /><!-- 獲取網絡狀態,根據網絡狀態切換進行數據請求網絡轉換 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 讀取外置存儲。如果開發者使用了so動態加載功能并且把so文件放在了外置存儲區域,則需要申請該權限,否則不需要 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 寫外置存儲。如果開發者使用了離線地圖,并且數據寫在外置存儲區域,則需要申請該權限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 這個權限用于進行網絡定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 這個權限用于訪問GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"android:name=".DemoApplication"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="XkgsMYYtBgIblZ0NLD3DUnF35cf3oFFV" ></meta-data><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

二、顯示地圖

? ? ? ?1.前端部分

? ? ? ? 這里顯示了普通的地圖,衛星圖,交通圖和熱力圖,首先我們的前端界面,也就是activity_main.xml文件為:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/normal_map"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="普通圖"/><Buttonandroid:id="@+id/satellite_map"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="衛星圖"/><Buttonandroid:id="@+id/traffic_map"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="交通圖"/><Buttonandroid:id="@+id/heart_map"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="熱力圖"/></LinearLayout><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"/></LinearLayout>

界面預覽為:

2.邏輯代碼

? ? ?按照官網的要求,先新建一個自定義的Application,在其onCreate方法中完成SDK的初始化:

?代碼為:

public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//在使用SDK各組件之前初始化context信息,傳入ApplicationContextSDKInitializer.initialize(this);//自4.3.0起,百度地圖SDK所有接口均支持百度坐標和國測局坐標,用此方法設置您使用的坐標類型.//包括BD09LL和GCJ02兩種坐標,默認是BD09LL坐標。SDKInitializer.setCoordType(CoordType.BD09LL);} }

注意在AndroidManifest.xml文件中聲明該Application

然后編輯MainActivity中的邏輯代碼:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private MapView mMapView = null;private BaiduMap mBaiduMap =null;private LocationClient mLocationClient = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);Button normalMap = (Button)findViewById(R.id.normal_map);Button intalliteMap = (Button)findViewById(R.id.satellite_map);Button trafficMap = (Button)findViewById(R.id.traffic_map);Button heartMap = (Button)findViewById(R.id.heart_map);normalMap.setOnClickListener(this);intalliteMap.setOnClickListener(this);trafficMap.setOnClickListener(this);heartMap.setOnClickListener(this);//獲取地圖控件引mMapView = (MapView) findViewById(R.id.bmapView);mBaiduMap = mMapView.getMap();//普通地圖 ,mBaiduMap是地圖控制器對象mBaiduMap.setMyLocationEnabled(true);//權限相關邏輯List<String>permissionList = new ArrayList<>();if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_NETWORK_STATE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_NETWORK_STATE);}if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.INTERNET)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.INTERNET);}if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);}if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);}if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}//如果非空if(!permissionList.isEmpty()){String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this,permissions,1);}else{}}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.normal_map:mBaiduMap.setTrafficEnabled(false);mBaiduMap.setBaiduHeatMapEnabled(false);mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);break;case R.id.satellite_map:mBaiduMap.setTrafficEnabled(false);mBaiduMap.setBaiduHeatMapEnabled(false);mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);break;case R.id.heart_map:mBaiduMap.setTrafficEnabled(false);mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);mBaiduMap.setBaiduHeatMapEnabled(true);break;case R.id.traffic_map:mBaiduMap.setBaiduHeatMapEnabled(false);mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);mBaiduMap.setTrafficEnabled(true);}}@Overrideprotected void onResume() {super.onResume();//在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity執行onPause時執行mMapView. onPause (),實現地圖生命周期管理mMapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理mMapView.onDestroy();}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode){case 1:if(grantResults.length > 0){for(int result: grantResults){if(result != PackageManager.PERMISSION_GRANTED){Toast.makeText(this,"必須同意所有權限才可以使用應用",Toast.LENGTH_SHORT).show();finish();return;}}//同意了才會執行到這里}else{Toast.makeText(this,"發生未知錯誤",Toast.LENGTH_SHORT).show();finish();}}}public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 銷毀后不在處理新接收的位置if (location == null || mMapView == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設置開發者獲取到的方向信息,順時針0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}} }

結果顯示為:

?

?

?三、將自己顯示到地圖上

?修改MainActivity.java中的代碼

?

//定位初始化mLocationClient = new LocationClient(this);//通過LocationClientOption設置LocationClient相關參數LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打開gpsoption.setCoorType("bd09ll"); // 設置坐標類型option.setScanSpan(1000);//設置locationClientOptionmLocationClient.setLocOption(option);//注冊LocationListener監聽器MyLocationListener myLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(myLocationListener);

MyLocationConfiguration mLocationConfiguration = new MyLocationConfiguration(LocationMode.FOLLOWING,true,BitmapDescriptorFactory.fromResource(R.drawable.dead));mBaiduMap.setMyLocationConfiguration(mLocationConfiguration);

顯示圖標的話可以去:iconfont-阿里巴巴矢量圖標庫

注意吧那個圖標的像素改小點!!!

?

?運行效果:

?

總結

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

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