20212416 2023-2024-2 《移動平臺開發與實踐》第5次作業

百度地圖應用

  • 1.實驗內容
  • 2.實驗過程
    • 2.1 Android Studio配置
      • 2.1. 創建一個Android項目
      • 2.2 在項目中本地集成BaiduMap SDK
    • 2.2 編寫代碼
      • 2.2.1 配置AndroidManifest.xml文件
      • 2.2.2 編寫UI界面布局文件
      • 2.2.3 編寫主函數代碼
      • 2.2.4 運行結果
  • 3.學習中遇到的問題及解決
  • 4.學習感悟與思考
  • 參考資料

1.實驗內容

設計并開發一個地圖應用系統

2.實驗過程

2.1 Android Studio配置

  • 由于申請key比較麻煩,本次實驗使用的SDK和AK都直接使用志強老師在群里給出的
    在這里插入圖片描述

2.1. 創建一個Android項目

  • 注意語言選擇java會方便些,志強老師給的是java代碼嘿嘿

2.2 在項目中本地集成BaiduMap SDK

  1. 下載開發包
  2. 添加jar文件
  • 在app下新建libs文件夾
    在這里插入圖片描述
  1. 添加so文件
  • 在src/main下創建jniLibs文件夾,把志強老師的libs包解壓后可以得到so文件,解壓后放入jniLibs文件夾中
    在這里插入圖片描述
  1. 往工程中添加jar文件
  • 菜單欄選擇File -> Project Structure
  • 在彈出的Project Structure對話框中選中左側的Modules列表下的app目錄
  • 點擊右側頁面中的Dependencies選項卡
  • 點擊左上角加號“?”選擇Jar dependency,然后選擇要添加的jar文件路徑
    在這里插入圖片描述
    在這里插入圖片描述
  1. 添加成功可看到jar包可以展開,build.gradle中可以看到添加了相關依賴。
    在這里插入圖片描述
    在這里插入圖片描述

2.2 編寫代碼

2.2.1 配置AndroidManifest.xml文件

  1. 添加key(這里的key就用志強老師的啦)
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="6lmYlAJwcQUNz2gGwem8VXpq0T7lDGxG" />
  1. 添加相關權限
<!-- 訪問精確位置的權限 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 這個權限用于進行網絡定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- 獲取運營商信息,用于支持提供運營商信息相關的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.2.2 編寫UI界面布局文件

  • 以下為main_activity.xml代碼:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!--百度地圖控件--><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><!--位置文本布局的背景色代碼的前2位代碼為透明度--><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#e0000000"android:orientation="vertical" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="20dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="緯度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="經度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地址:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout></LinearLayout></FrameLayout>

2.2.3 編寫主函數代碼

  • 以下為MainActivity.java完整代碼
package com.example.baidumap;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;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.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;/*百度地圖應用,包含定位信息和地圖顯示一般需要打開定位服務,選擇高精度定位模式,有網絡連接需要在清單文件里使用百度云服務(參見清單文件service標簽)需要創建應用(模塊)的Key,并寫入清單文件(參見清單文件meta標簽)
*/
public class MainActivity extends AppCompatActivity {LocationClient mLocationClient;  //定位客戶端MapView mapView;  //Android Widget地圖控件BaiduMap baiduMap;boolean isFirstLocate = true;TextView tv_Lat;  //緯度TextView tv_Lon;  //經度TextView tv_Add;  //地址@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//如果沒有定位權限,動態請求用戶允許使用該權限if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);}else {requestLocation();}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 1:if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "沒有定位權限!", Toast.LENGTH_LONG).show();finish();} else {requestLocation();}}}private void requestLocation() {initLocation();mLocationClient.start();}private void initLocation() {  //初始化mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView = findViewById(R.id.bmapView);baiduMap = mapView.getMap();tv_Lat = findViewById(R.id.tv_Lat);tv_Lon = findViewById(R.id.tv_Lon);tv_Add = findViewById(R.id.tv_Add);LocationClientOption option = new LocationClientOption();//設置掃描時間間隔option.setScanSpan(1000);//設置定位模式,三選一option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);/*option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);*///設置需要地址信息option.setIsNeedAddress(true);//保存定位參數mLocationClient.setLocOption(option);}//內部類,百度位置監聽器private class MyLocationListener  implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {tv_Lat.setText(bdLocation.getLatitude()+"");tv_Lon.setText(bdLocation.getLongitude()+"");tv_Add.setText(bdLocation.getAddrStr());if(bdLocation.getLocType()==BDLocation.TypeGpsLocation || bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){navigateTo(bdLocation);}}}private void navigateTo(BDLocation bdLocation) {if(isFirstLocate){LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);isFirstLocate = false;}}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView=(MapView)findViewById(R.id.bmapView);mapView.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();mLocationClient.stop();mapView.onDestroy();}
}

2.2.4 運行結果

  • 第一次使用時會詢問權限
    在這里插入圖片描述
  • 但是用as的虛擬設備會閃退,這里直接使用真機運行,會顯示真機所在地址
    在這里插入圖片描述

3.學習中遇到的問題及解決

  • 問題1:as連接蘋果手機檢測不到真機
  • 問題1解決方案:若使用蘋果手機作為真機還需安裝xcode等模擬器,這里直接借用舍友的安卓機。

4.學習感悟與思考

  • 本次實踐在志強老師給好了key和各類包以及源代碼的基礎上其實不是很難,主要的難點我認為其實在于熟悉as連接不同的設備比如mumu模擬器、IOS真機、Android真機等,現在我已經不用看教程連接真機了(都是淚)。

參考資料

在群聊里捏,給不了大家連接惹……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15265.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

向量數據庫的使用

向量數據庫 向量數據庫是一種專門用于存儲、管理和查詢高維向量數據的數據庫系統。隨著人工智能和機器學習的廣泛應用&#xff0c;向量數據庫在處理非結構化數據&#xff08;如文本、圖像、音頻和視頻等&#xff09;的任務中變得越來越重要。本文將介紹快速使用Chroma 安裝 …

Pyqt5中獲取按鈕的值

使用Sender()函數 // An highlighted block class MyWindow(QWidget):def __init__(self):super(MyWindow, self).__init__()self.setui()# #def calculate(self):button self.sender()print("button:{}".format(button.text()))def setui(self):data [["7&…

Nginx將https重定向為http進行訪問的配置(附Demo)

目錄 前言1. Demo2. 彩蛋前言 對應nginx的基本知識推薦閱讀: Nginx配置靜態網頁訪問(圖文界面)Nginx從入門到精通(全)java框架 零基礎從入門到精通的學習路線 附開源項目面經等(超全)由于網站默認無配置https,但輸入網址的時候瀏覽器默認帶https,導致網頁一直無法訪問…

Spring的依賴注入

Date public class Student{public String name ;public String[] array ;public Grade grade;public List list;public Set set;public Map map;public Properties prop;//使用IOC默認使用無參構造器創建對象&#xff0c;沒有無參構造器會報錯 // public Student(Strin…

數據結構篇其三---鏈表分類和雙向鏈表

? 前言 數據結構篇其二實現了一個簡單的單鏈表&#xff0c;鏈表的概念&#xff0c;單鏈表具體實現已經說明&#xff0c;如下&#xff1a; 單鏈表 事實上&#xff0c;前面的單鏈表本質上是無頭單向不循環鏈表。此篇說明的雙向鏈表可以說完全反過來了了。無論是之前的單鏈表還…

Java進階學習筆記12——final、常量

final關鍵字&#xff1a; final是最終的意思。可以修飾類、方法、變量。 修飾類&#xff1a;該類就被稱為最終類&#xff0c;特點是不能被繼承了。 修飾方法&#xff1a;該方法是最終方法&#xff0c;特點是不能被重寫了。 修飾變量&#xff1a;該變量只能被賦值一次。 有些…

智慧校園的建設思路

智慧校園建設的一個主要目的就是要打破學校內的信息孤島&#xff0c;其核心是在人、流程和信息三個層面的全面整合。智慧校園應該能夠為全校師生員工及校外用戶提供統一的、一站式的服務渠道&#xff1b;能夠將學校各種業務流程連接起來&#xff0c;實現各種應用系統的互聯互通…

postgresql insert on conflict 不存在則插入,存在則更新

向一張表執行插入動作&#xff0c;如果插入的字段數據已存在&#xff0c;則執行更新操作&#xff0c;不存在則進行插入操作。 1、創建一張表 CREATE TABLE "user_info" ( "id" int2 NOT NULL, "name" varchar(20) COLLATE "pg_catalog&quo…

基于Tensorflow卷積神經網絡人臉識別公寓人員進出管理系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 隨著科技的快速發展和智能化水平的提高&#xff0c;公寓管理面臨著越來越多的挑戰。傳統的公寓…

Go語言標準庫之log和三方庫zap

一、Log 1.1 logger基本使用 Go語言內置的log包實現了簡單的日志服務。本包也提供了一個預定義的“標準”logger&#xff0c;可以通過調用函數Print系列(Print|Printf|Println)、Fatal系列&#xff08;Fatal|Fatalf|Fatalln)、和Panic系列&#xff08;Panic|Panicf|Panicln)來…

C++ 數據結構算法 學習筆記(32) -五大排序算法

C 數據結構算法 學習筆記(32) -五大排序算法 選擇算法 如下若有多個女生的身高需要做排序: 常規思維: 第一步先找出所有候選美女中身高最高的&#xff0c;與最后一個數交換 第二步再找出除最后一位美女外其它美女中的最高者&#xff0c;與倒數第二個美女交換位置 再找出除最…

k8s-pod詳解

一、Pod基本概念&#xff1a; 1.pod介紹&#xff1a; Pod是kubernetes中最小的資源管理組件&#xff0c;Pod也是最小化運行容器化應用的資源對象。一個Pod代表著集群中運行的一個進程。kubernetes中其他大多數組件都是圍繞著Pod來進行支撐和擴展Pod功能的&#xff0c;例如&am…

電賽經驗分享——賽前準備

? 大家好哇&#xff01;我是小光&#xff0c;想要成為系統架構師的嵌入式愛好者。 ?在之前的電賽中取得了省一的成績&#xff0c;本文對電賽比賽前需要準備什么做一個經驗分享。 ?感謝你的閱讀&#xff0c;不對的地方歡迎指正。 加入小光嵌入式交流群&#xff08;qq群號&…

在線人才測評在企業招聘和大學生求職中的應用場景

每年的春招秋招&#xff0c;都是畢業生們忙著找工作的季節&#xff0c;相比社招來說&#xff0c;春招秋招是每個畢業生務必重視的機會&#xff0c;大廠名企畢竟名額有限&#xff0c;如果找到自己心儀的職業崗位&#xff0c;作為畢業生就必須提前準備&#xff0c;深入了解招聘的…

五管OTA輸入極性快速判斷

做CMFB還有負反饋的時候曾經在判斷輸入輸出極性上吃了大虧&#xff0c;直接做實驗波形正確就是輸入正端&#xff0c;全差分就不用考慮這么多了 和彎折&#xff0c;形狀類似7&#xff0c;相同方向輸入正端&#xff0c;相反的就是輸入負端&#xff0c;輸出也是和輸入負端一個方向…

【NLP】人機對話

概念 機器翻譯就是用計算機把一種語言翻譯成另外一種語言的技術 機器翻譯的產生與發展 17 世紀&#xff0c;笛卡爾與萊布尼茨試圖用統一的數字代碼來編寫詞典 1930 機器腦 1933 蘇聯發明家特洛陽斯基用機械方法將一種語言翻譯為另一種語言 1946 ENIAC 誕生 1949 機器翻譯問題…

香蕉成熟度檢測YOLOV8NANO

香蕉成熟度檢測YOLOV8NANO&#xff0c;采用YOLOV8NANO訓練&#xff0c;得到PT模型&#xff0c;然后轉換成ONNX模型&#xff0c;讓OEPNCV調用&#xff0c;從而擺脫PYTORCH依賴&#xff0c;支持C。python&#xff0c;安卓開發。能檢測六種香蕉類型freshripe freshunripe overripe…

Vita-CLIP: Video and text adaptive CLIP via Multimodal Prompting

標題&#xff1a;Vita-CLIP: 通過多模態提示進行視頻和文本自適應CLIP 源文鏈接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Wasim_Vita-CLIP_Video_and_Text_Adaptive_CLIP_via_Multimodal_Prompting_CVPR_2023_paper.pdfhttps://openaccess.thecvf.…

sw布爾減

可能最有效率還是草圖邊界線,然后用草圖做分割

ue5 中ps使用記錄貼

一、快捷鍵記錄 放大圖形 ctrlalt空格 放大圖形 縮小視口 ctrl空格 ctrlD 取消選區 ctrlt縮小文字 w魔棒工具 選擇魔棒的時候把容差打開的多一點 二、案例 移動文字 在相應的圖層選擇 移動文字 修改圖片里的顏色 在通道里拷貝紅色通道&#xff0c;復制紅色通道粘貼給正常圖…