安卓APP源码和设计报告——导航系统

news2024/9/24 13:17:20

演示答辩发言稿:

注意:1.在mainfest.xml文档中添加访问权限即一系列<uses-permission>元素使用Android中提供的权限。比如百度地图的使用联网的情况下需要网络功能权限。

2.在Stings.xml中添加一些字符串数组,离线数据管理、简体繁体切换信息,存放字符串信息

麦当劳类目录:

dbcc8d7534b44ee6904924eaf044cd4e.webp

 

Mc_DBUtil

McAddressInfo

MainActivity

McAdView

McContant

MainActivity这个类起一个在MVC模型中的Controller的功能,生成软件界面,是View层的内容并且也从Model层取出数据通过它自身的控制,将信息显示在View层上。。

 

MainActivity与BNavigatorActivity这两个Controller分别控制主界面以及地图界面,两者有着关联的关系,MainActivity可以控制主界面经过一些触发事件调用MainActivity中的LaunchNavigator()方法跳转到地图界面。即运行界面右上角的三角按钮。

 

各类的作用简介:

 

BNavigatorActivity类主要控制地图界面,创建Mapview,导航视图,设置语音播放,以及对导航过程中来电话的处理。

 

MainActivity则是对主界面进行控制的,其中包含许多自定义方法:其中最主要的便是gotoMainView()方法即主界面控制。首先初始化导航引擎,再自定义3个radioButton的监听器回调函数。从而实现按下3个按钮后的对应功能。还有初始化地址的方法,创建对话框方法、动态更新对话框内容方法、为下拉框配置监听器方法、计算路径距离方法、发布导航消息方法、获得sd卡路径方法,调用GPS方法、获得位置方法、初始化店名、区名列表方法。位置改变触发方法。导航的起点终点设置在此类中完成。用不同的state值表示按了不同的RadioButton,就是主界面的控制。

 

Mc_DBUtil即SQLite数据库的创建,注意数据库信息放入data/data/包名下面。正如sharedPerence中所提及的查看file Explore可以查看数据。对数据库的增删关闭操作。类中有初始化数据方法,通过sql语句获取城市名列表、获取区名列表、获取店名列表、获取确定了的店名列表、获取店名、所有地址的经纬度列表。

 

McADDressInfo类主要存放麦当劳店经纬度信息,列表信息等。

 

McAdView是麦当劳广告界面继承view 类,使用图片数组,利用线程实现图片的更新,这里就放了3张图片。如上机中曾分析的例子Handler利用线程控制图片的更新展示。最主要的是将代码作为了main.xml中的元素使得主界面中能够出现广告图片。

 

McConstant则是存放一些常数如:MapView的尺寸信息、边界宽度、Toast消息编号等。

 

运行效果:

89884781f9874117a72453a5c5aa9352.jpeg

 

 

设计报告

 

课程名称:

班 级:

 

学 号:

 

姓 名:

 

任课教师:

 

导航程序分析与改造

 

一、程序功能和环境:

 

程序功能:

通过三种选择方式:列表选择、自己填写地址、根据距离最近查询来查询南京市各个麦当劳的地址,用百度地图即手机自带的GPS显示麦当劳位置,并依据路径语音导航。

 

2.开发环境:

 

ADT:基于Eclipse的Android开发工具扩充套件(Android Development Tools plugin)

 

安卓手机一部

 

3.程序所必须的配置,设计:

 

百度地图API:即armabi文件夹将其添加到libs文件夹下

 

在AndroidManifest.xml中添加权限:

 

a.SDK1.5需要android.permission.GET_TASKS权限判断本程是否为当前运行的应用

 

b.来电消音权限

 

c.使用网络功能所需权限

 

d.使用wifi所需权限

 

e连接GPS所需权限

 

f.访问百度地图服务位置所需权限

 

在res values文件夹下的strings.xml中添加与百度地图使用相关的资源信息。

 

g.在百度API中申请key,申请地址http://lbsyun.baidu.com/apiconsole/key,进入如下界面:

 

 

选择创建应用:

 

 

开始配置应用,我们需要配置我们应用的安全码(形式为:输入“安全码”。安全码的组成规则为:Android签名证书的sha1值+“;”+packagename(即:数字签名+分号+包名))安全码的获取方式如下:我们这边使用Eclipse直接查看: winows -> preferance-> android -> build:

 

 

在之前的步骤中输入安全码,sha1值+我创建的应用的包名,点击确认如下图:

 

 

这样key的配置完成。

 

在AndroidManifest.xml中添加以下内容:

 

 

然后点击保存。

 

自动生成的keystore文件用于存放存放私钥和证书信息,程序运行时可依据key值是否合法,如果是合法的才可以用百度地图。

 

Key校验的结果显示到主界面上通过以下代码,调用toast显示瞬间信息:

 

 

二、MVC架构用例、结构分析、类图:

 

1.主界面的controller与主界面相关类之间的关系图:

 

 

MVC结构分析:

 

MainActivity这个类起一个在MVC模型中的Controller的功能,生成软件界面,是View层的内容并且也从Model层取出数据通过它自身的控制,将信息显示在View层上。这里Mc_DBUtil属于Model层,存放了程序所需的数据,包含了对数据库的操作方法。McConstant类存放了一些与距离、界面、尺寸相关的常数。McADDressInfo类主要存放麦当劳店经纬度信息,列表信息等。MainActivity使用了Mc_DBUtil、McConstant、McADDressInfo几个类中的属性及方法。McAdView属于View层它继承了View类,包含了MainActivity类型的属性,用于显示界面的广告部分。

 

2.两个controller:主界面controller与地图controller之间的关系图:

 

 

结构分析:

 

MainActivity与BNavigatorActivity这两个Controller分别控制主界面以及地图界面,两者有着关联的关系,MainActivity控制主界面经过一些触发事件后调用其中的LaunchNavigator()回调方法重写onJumptoNavigator()跳转到地图界面。

 

3.程序中各类的简介及作用:

 

BNavigatorActivity:主要控制地图界面,创建Mapview,导航视图,设置语音播放,以及对导航过程中来电话的处理。

 

MainActivity:对主界面进行控制,其中包含许多自定义方法:其中最主要的便是gotoMainView()方法即主界面控制。首先初始化导航引擎,再自定义3个radioButton的监听器回调函数。从而实现按下3个按钮后的对应功能。还有初始化地址的方法,创建对话框方法、动态更新对话框内容方法、为下拉框配置监听器方法、计算路径距离方法、发布导航消息方法、获得sd卡路径方法,调用GPS方法、获得位置方法、初始化店名、区名列表方法。位置改变触发方法。导航的起点终点设置在此类中完成。用不同的state值表示按了不同的RadioButton,就是主界面的控制。

 

Mc_DBUtil:SQLite数据库的创建,注意数据库信息放入data/data/包名下面。正如sharedPerence中所提及的查看file Explore可以查看数据。对数据库的增删关闭操作。类中有初始化数据方法,通过sql语句获取城市名列表、获取区名列表、获取店名列表、获取确定了的店名列表、获取店名、所有地址的经纬度列表。

 

McADDressInfo:主要存放麦当劳店经纬度信息,列表信息等。

 

McAdView:麦当劳广告界面继承view 类,使用图片数组,利用线程实现图片的更新,这里就放了3张图片。如上机中曾分析的例子Handler利用线程控制图片的更新展示。最主要的是将代码作为了main.xml中的元素使得主界面中能够出现广告图片。

 

McConstant:存放一些常数如:MapView的尺寸信息、边界宽度、Toast消息编号等。

 

主要代码分析:

 

BNavigatorActivity.java的地图界面创建主要依靠以下代码:

 

public void onCreate(Bundle savedInstanceState){

 

super.onCreate(savedInstanceState);

 

//创建NmapView

 

if (Build.VERSION.SDK_INT < 14) {

 

BaiduNaviManager.getInstance().destroyNMapView();

 

}

 

MapGLSurfaceView nMapView = BaiduNaviManager.getInstance().createNMapView(this);

 

//创建导航视图

 

View navigatorView = BNavigator.getInstance().init(BNavigatorActivity.this, getIntent().getExtras(), nMapView);

 

//填充视图

 

setContentView(navigatorView);

 

BNavigator.getInstance().setListener(mBNavigatorListener);

 

BNavigator.getInstance().startNav();

 

// 初始化TTS. 开发者也可以使用独立TTS模块,不用使用导航SDK提供的TTS

 

BNTTSPlayer.initPlayer();

 

//设置TTS播放回调

 

BNavigatorTTSPlayer.setTTSPlayerListener(new IBNTTSPlayerListener() {

 

}

 

}

 

数据库设计:

我用的是Android系统自带的SQLite数据库,创建数据库。将创建的数据库放在“/data/data/com.example.mcnavigation3/sd.db”此路径下。在创建数据库前要判断是否存在这个数据库,数据库若存在则打开数据库,若不存在则自己创建数据库。数据库打开或创建好后建立数据表

建表语句:

create table if not exists sminfo

(infoid INTEGER(5),

city varchar(20),

csmc varchar2(40),

dm varchar2(80),

dz varchar2(100),

jd varchar2(20),

wd varchar2(20));

注意要有数据库关闭操作,数据的一些操作必须调用这个方法,以防一个操作后数据库发生改变影响其余操作。对数据的增删改查都是用sql语句实现的。该程序数据库的设计依靠的是Mc_DBUtil类。

对数据库的增删改查的操作由以下代码实现:

 

 

此程序的数据都由以上代码存储实现。

 

运行逻辑:

1.从数据库中读取内容的时序图:

 

 

2.根据用户输入地点查询地图时序图:

 

 

运行界面:

 

主界面的显示主要依靠main.xml以及MainActivity的控制,主界面所需的图片拷贝到工程的res文件夹下的drawable文件夹下。

 

界面下方的图片作为麦当劳导航的广告部分,其显示主要依靠以下代码:

 

Main.xml中:

 

 

正如此段代码所写此部分要结合McAdView这个类

 

此部分图片的动态主要依赖图片数组以及线程控制。数组用于存放与麦当劳有关的3张图片,重写线程中的run()方法实现图片的切换显示,定切换周期。实现代码如下:

 

数组存储图片代码:

 

 

调用线程代码:

 

 

图片的动态显示即图片的重画,这段代码的作用是每

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78967.html

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

相关文章

python---数据容器

目录 环境安装 python语法 打印语句 注释 变量 变量声明 变量类型 boolean类型 占位符 控制数据精度 输入输出 条件控制 循环语句 while循环 for循环 函数 None类型 数据容器 列表 元组 字符串 序列 集合 字典 环境安装 1、安装python运行环境 Welcome t…

swiftui 中的app和 Scenes有什么,他们是什么关系

app和 Scenes有什么,他们是什么关系 SwiftUI 中的 app 和 Scenes 是两个相关的概念,它们都与应用程序的用户界面有关。 app 是指使用 SwiftUI 框架开发的应用程序,它包含了用户界面的所有内容和逻辑。在 SwiftUI 中,app 的界面通常由多个视图组成,每个视图都可以显示不同…

使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

前言 在今年声网主办的「RTE2022 编程挑战赛」中&#xff0c;数支队伍经过一个多月的努力开发&#xff0c;很多优秀的作品最终突出重围&#xff0c;斩获大奖。本文由RTE2022编程挑战赛获奖者之一李新春撰写&#xff0c;他主要围绕获奖作品「Piloteer助盲服务平台」分享了开发的…

用HarmonyOS ArkUI实现点赞美女翻牌动效

本文演示如果用HarmonyOS的ArkUI来实现一个点赞的动画效果。体验HarmonyOS 3最新的API 9&#xff0c;欢迎大家一起参与构建这个万物互联的时代&#xff01; 活动主页 HarmonyOS线上Codelabs挑战赛已经开启&#xff0c;该系列挑战赛将围绕HarmonyOS的基础组件和容器组件、三方…

用Clash解决Python安装模块慢的问题

已经开了代理了&#xff0c;但如果没有使用全局模式的话&#xff0c;Python模块下载速度依然非常慢&#xff0c;只有几十K。使用全局模式是可以解决这个问题&#xff0c;但同时访问国内的一些网站又会速度特别慢&#xff0c;甚至打不开。 比如我们亲爱的知乎就会显示&#xff…

Vue项目初始化

1.创建脚手架&#xff1a; cmd控制台切换到指定的目录命令&#xff1a; vue create 项目名 然后cd到项目里运行&#xff1a; npm run serve 生成目录 2.配置&#xff1a; &#xff08;1&#xff09;关闭eslint 防止定义没用带来的报错 在vue.config.js中&#xff1a; 配置&…

Codeforces Global Round 19 D. Yet Another Minimization Problem

翻译&#xff1a; 给定两个数组&#x1d44e;和&#x1d44f;&#xff0c;长度都为&#x1d45b;。 选择索引&#x1d456;(1≤&#x1d456;≤&#x1d45b;)&#xff0c;将&#x1d44e;&#x1d456;和&#x1d44f;&#x1d456;交换。 让我们来定义数组的成本&#x1d…

Java连接SQL Server数据库的详细操作流程

Java连接SQL Server数据库的详细操作流程 一.明确JDK版本和下载驱动 1.1 JDK版本查看 win r输入cmd,命令窗口输入java --version 1.2 SQL Server官网下载驱动 SQL Server驱动下载直达地址 下载完成后解压到自己熟悉的目录&#xff0c;不出意外的话你会看到以下文件 1.3 …

IO流~字符流

字符流 为什么会出现字符流 由于字节流操作中文不是特别的方便&#xff0c;所以Java就提供字符流 字符流 字节流 编码表 用字节流复制文本文件时&#xff0c;文本文件也会有中文&#xff0c;但是没有问题&#xff0c;原因是最终底层操作会自动进行字节拼接成中文&#xf…

基于Java的学生竞赛管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

数据库面试题1-数据库基本概念、常用SQL语言

题1&#xff1a;什么是数据库 数据库&#xff08;Database&#xff09; 是保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;&#xff0c;是通过 数据库管理系统&#xff08;DataBase- Management System&#xff0c;DBMS&#xff09; 创建和操纵的容器…

Chat GPT原理

ChatGPT一经发布就在科技圈火得不行&#xff0c;这两天也是被传得神乎其神&#xff0c;听说它写得了代码、改得了 Bug&#xff0c;小说、段子统统不再话下&#xff01;那他到底是怎么训练成现在这样的呢&#xff1f;本文介绍李宏毅老师的分析。 那么接下来我们就来介绍Chat GPT…

学习在UE中为截屏工具(SceneCapture)添加一种新的源(Source)

SceneCapture 创建一个SceneCapture2D类型的Actor&#xff0c;再新建一个RenderTarget资源交给它。随后&#xff0c;就能看到截屏的数据出现在RenderTarget中。通过修改 Capture Source &#xff0c;可以改变截取的数据源&#xff0c;比如法线、基础色等等。 目标 本篇的目…

论文投稿指南——中国(中文EI)期刊推荐(第4期)

&#x1f680; EI是国际知名三大检索系统之一&#xff0c;在学术界的知名度和认可度仅次于SCI&#xff01;&#x1f384;&#x1f388; 【前言】 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。其中&#xf…

AndroidT(13) Log 系统 -- logd 服务的初始化(七)

1. 概览 经过上一章的分析&#xff0c;现在也是时候讨论下logd的初始化了&#xff0c;虽然 logd 在代码量上来说并不大&#xff0c;但是还是分模块进行分析比较合适。所以这里就不贴整体代码了&#xff0c;这部分代码也被包含在AOSP t 的代码中&#xff0c;有兴趣的读者可以自己…

【LeetCode102. 二叉树的层序遍历】——层序遍历

102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示…

[附源码]Python计算机毕业设计SSM基于的优质房源房租管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

LeetCode HOT 100 —— 207 .课程表

题目 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例…

软件测试的类型

在本节中&#xff0c;我们将了解各种类型的软件测试&#xff0c;这些测试可以在软件开发生命周期时使用。 众所周知&#xff0c; 软件测试 是根据客户的先决条件分析应用程序功能的过程。 如果我们想确保我们的软件没有错误或稳定&#xff0c;我们必须执行各种类型的软件测试…

神经辐射场NeRF

NeRF: Representing Scenes as Neural Radiance Fields for Novel View Synthesis 文章目录NeRF: Representing Scenes as Neural Radiance Fields for Novel View SynthesisPipelineStepsVolume RenderingOptimizationPositional EncodingHierarchical Volume Samplingview-de…