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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android 百度地图开发详解

發(fā)布時間:2023/12/9 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 百度地图开发详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • 實驗環(huán)境
    • 申請 API Key
    • 使用百度定位
      • 準備 LBS SDK
    • 編碼

聲明:本人小白,文章作為自己的學習筆記,與大家分享,歡迎大家于本人學習交流
本文 refer to

作者:郭霖
書名:第一行代碼Android第2版
出版社:人民郵電出版社

感謝此書籍原創(chuàng)者,如有侵犯您的知識產(chǎn)權(quán)和版權(quán)問題,請通知本人,本人會即時做出處理并刪除文章

Email:louhergetup@163.com

感謝您閱讀我的文章,未經(jīng)本人許可,文章不得用于商業(yè)用途。轉(zhuǎn)載請注明出處,否則屬于侵權(quán)行為。

實驗環(huán)境

  • 操作系統(tǒng):win10 64
  • 軟件環(huán)境:Android Studio 3.5.3
  • 編程語言:Java 13

申請 API Key

首先需要注冊百度賬號,登陸百度賬號,打開網(wǎng)址 http://developer.baidu.com/user/info 填寫注冊信息并提交,然后去自己的郵箱通過驗證,就完成注冊了。
接著訪問 https://lbsyun.baidu.com/apiconsole/key 會看到下面這個界面

點擊 創(chuàng)建應(yīng)用 申請 API Key, 應(yīng)用名稱可以隨便填,這里填 LBSTest,應(yīng)用類型選擇 Android SDK,啟用服務(wù)保持沉默即可,如下圖所示

發(fā)布版 SHA1 是打包程序時所用的簽名文件的 SHA1 指紋,可以通過 Android 查看,新建一個 Android Studio 項目,如圖(開發(fā)版 SHA1 我們等下再說)

接下來,一路 Next,就可以了。

點擊右側(cè) Gradle,然后點擊標紅的 Sync 按鈕,

然后會出現(xiàn)下圖

點擊 :app --> Task --> android -->

雙擊 signingReport, 我們即可得到 發(fā)布版SHA1 指紋

把 SHA1: 后面的字符復(fù)制到創(chuàng)建百度地圖應(yīng)用界面的對應(yīng)位置,
開發(fā)版的 SHA1 我們需要創(chuàng)建一個正式的簽名文件,點擊 Android Studio 頂部工具欄中的 Build --> Generate Signed APK,彈出如下窗口

點擊 Create new… 彈出如下窗口

點擊第一行的三個點,彈出如下窗口,選擇簽名文件保存的路徑,并填寫簽名文件名稱,并點擊 OK

填寫密碼和名字

點擊 OK,會回到如下界面,然后關(guān)閉這個窗口

然后按 win + r 輸入 cmd 輸入如下命令,

keytool -list -v -keystore <簽名文件路徑>

比如我創(chuàng)建的簽名文件路徑為 D:\miyao.jks\LBSTest.jks ,如圖

輸入你剛才設(shè)置的密碼,如圖

把 SHA1:后的字符復(fù)制到創(chuàng)建百度地圖應(yīng)用界面的對應(yīng)位置。
包名這里我們填 com.example.a83445.lbstest (包名在我們創(chuàng)建 Android project 的界面中已經(jīng)設(shè)置了)

點擊提交,應(yīng)用就創(chuàng)建成功了

上圖中 OmVEuKl1IxomNQ1jq1qlGnePFpwsIdq6 就是我們申請到的 API Key。

使用百度定位

建議在手機上運行調(diào)試

準備 LBS SDK

在開始編碼之前,我們需要下載百度 LBS 開放平臺的 SDK,下載地址為 http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar 選擇 基礎(chǔ)定位基礎(chǔ)地圖 然后點擊 開發(fā)包 下載按鈕

解壓下載的文件,在下載文件中 libs 目錄下的內(nèi)容分為兩部分,如圖,BaiduLBS_Android.jar 是 Java 層要使用的,其他子目錄下的 so 文件時 Native 層要用到的。so 文件是用 C/C++ 語言編寫的,然后再用 NDK 編譯出來的。 我們這里不需要編寫 C/C++ 的代碼,因為百度都已經(jīng)做好了封裝, 但是我們需要將 libs 目錄下的每一個文件都放到正確的位置。

觀察一下當前的項目結(jié)構(gòu), app 模塊下有一個 libs 目錄,這里就是用來存放所有 Jar 包的,我們將 BaiduLBS_Android.jar 復(fù)制到這個目錄下,如下圖所示

接下來,展開 src/main 目錄,鼠標右鍵點擊該目錄–>New–>Directory, 創(chuàng)建一個名為 jniLibs 的目錄,這個目錄是專門用來存放 so 文件的,然后把壓縮包里的其他所有目錄直接復(fù)制到這里,如圖

為了讓項目引用到 Jar 包中提供的接口,我們需要點擊一下 Android Studio 頂部工具欄的 Sync 按鈕(就是我前面圈出來那個按鈕)

點擊 Sync 之后,libs 目錄下的 jar 文件就會多出一個向右的箭頭,表示項目已經(jīng)能引用到這些 jar 包
這樣我們就把 LBS 的 SDK 都準備好了,接下來就可以開始編碼了

編碼

MainActivity.java 代碼如下

public class MainActivity extends AppCompatActivity {public LocationClient mLocationClient;private MapView mapView;private BaiduMap baiduMap;private boolean isFirstLocate = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());//初始化setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.bmapView);baiduMap = mapView.getMap();baiduMap.setMyLocationEnabled(true);//用于顯示我的位置List<String> permissionList = new ArrayList<>();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.READ_PHONE_STATE);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (!permissionList.isEmpty()){String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);}else {requestLocation();}}//用于首次定位讓地圖移動到當前位置private void navigateTo(BDLocation location){if(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());//用于存放經(jīng)緯度MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);update = MapStatusUpdateFactory.zoomTo(16f);//縮放級別baiduMap.animateMapStatus(update);isFirstLocate = false;}MyLocationData.Builder locationBuilder = new MyLocationData.Builder();locationBuilder.latitude(location.getLatitude());locationBuilder.longitude(location.getLongitude());MyLocationData locationData = locationBuilder.build();baiduMap.setMyLocationData(locationData);}private void requestLocation() {initLocation();mLocationClient.start();//start方法開始定位}private void initLocation(){LocationClientOption option = new LocationClientOption();option.setScanSpan(5000);//5秒更新一次位置信息option.setIsNeedAddress(true);//啟用詳細位置option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//使用GPS定位mLocationClient.setLocOption(option);}@Overrideprotected void onResume(){super.onResume();mapView.onResume();}@Overrideprotected void onPause(){super.onPause();mapView.onPause();}@Overrideprotected void onDestroy(){super.onDestroy();mLocationClient.stop();//活動銷毀mapView.onDestroy();baiduMap.setMyLocationEnabled(false);}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) {switch (requestCode){case 1:if (grantResults.length > 0) {for (int result : grantResults) {if (result != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "必須同意所有權(quán)限才能使用本程序",Toast.LENGTH_SHORT).show();finish();return;}}requestLocation();}else{Toast.makeText(this, "發(fā)生未知錯誤", Toast.LENGTH_SHORT).show();finish();}break;default:}}public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(final BDLocation location){if(location.getLocType() == BDLocation.TypeGpsLocation|| location.getLocType() == BDLocation.TypeNetWorkLocation){navigateTo(location);}}} }

activity_main.xml 布局文件代碼如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent">//地圖控件使其占滿整個屏幕<com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"/></LinearLayout>

權(quán)限文件 AndroidManifest.xml 代碼如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.a83445.lbstest"><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_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.INTERNET"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.WAKE_LOCK"/><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"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="OmVEuKl1IxomNQ1jq1qlGnePFpwsIdq6" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>//注冊百度 LBS SDK 服務(wù)<serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service></application>

至此,Android 百度地圖初步開發(fā)完成

總結(jié)

以上是生活随笔為你收集整理的Android 百度地图开发详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。