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.mzph.cn/bicheng/15265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构篇其三---链表分类和双向链表

​ 前言 数据结构篇其二实现了一个简单的单链表&#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;公寓管理面临着越来越多的挑战。传统的公寓…

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.…

ue5 中ps使用记录贴

一、快捷键记录 放大图形 ctrlalt空格 放大图形 缩小视口 ctrl空格 ctrlD 取消选区 ctrlt缩小文字 w魔棒工具 选择魔棒的时候把容差打开的多一点 二、案例 移动文字 在相应的图层选择 移动文字 修改图片里的颜色 在通道里拷贝红色通道&#xff0c;复制红色通道粘贴给正常图…

大模型应用商业化落地关键:给企业带来真实的业务价值

2024 年被很多人称为大模型应用的元年&#xff0c;毫无疑问&#xff0c;大模型已经成为共识&#xff0c;下一步更急迫的问题也摆在了大家的面前——大模型到底能够用在哪&#xff1f;有哪些场景能落地&#xff1f;怎么做才能创造真正的价值&#xff1f; 在刚刚过去的 AICon 全…

【排序算法】快速排序(四个版本以及两种优化)含动图)

制作不易&#xff0c;三连支持一下吧&#xff01;&#xff01;&#xff01; 文章目录 前言一.快速排序Hoare版本实现二.快速排序挖坑法版本实现三.快速排序前后指针版本实现四.快速排序的非递归版本实现五.两种优化总结 前言 前两篇博客介绍了插入和选择排序&#xff0c;这篇博…

halcon配合yolov8导出onnx模型检测物体

1.工业上多数视觉开发都是用halcon开发的&#xff0c;halcon本身也有自己的深度学习网络&#xff0c;至于halcon如果不使用本身的深度学习&#xff0c;使用其他网络导出的onnx模型怎样配合使用&#xff1f;本文基于yolov8写一个列子。 2。创建输入数据的转换代码 #region 创建输…

【bugfix】/usr/local/bin/docker-compose:行1: html: 没有那个文件或目录

前言 在使用 docker-compose 管理容器化应用时&#xff0c;偶尔会遇到一些意想不到的错误&#xff0c;比如当尝试运行 docker-compose 命令时&#xff0c;终端非但没有展示预期的输出&#xff0c;反而出现类似网页错误的信息。这类问题通常与 docker-compose 的安装或配置有关…

首都师范大学聘请旅美经济学家向凌云为客座教授

2024年4月17日&#xff0c;首都师范大学客座教授聘任仪式在首都师范大学资源环境与旅游学院举行。首都师范大学资源环境与旅游学院院长吕拉昌主持了仪式&#xff0c;并为旅美经济学家向凌云教授颁发了聘书。 吕拉昌院长指出&#xff0c;要贯彻教育部产学研一体化战略&#xff0…

虚拟机Centos扩展磁盘空间

虚拟机空间&#xff1a;现sda大小20G&#xff0c;因课程需要扩容 在虚拟机扩容中&#xff0c; 新增一块硬盘 和 直接在原有硬盘基础上扩容是一样的&#xff08;只不过在原有硬盘上扩容需要关机才可以执行&#xff09;&#xff1b; 但两者都最好先做数据备份或快照&#xff0c…