软件名称:智能定位系统
软件功能:定位并读取当前经纬度坐标;

在地图中显示当前位置;

每20S以邮件形式发送当前经纬度及位置信息;

设置号码并一键求救;
软件适用范围:6岁以上人员;手机适用场景
软件目的:对儿童,老人及有需要人员进行实时位置监控,减少意外发生
软件介绍:该系统能够读取当前经纬坐标,并每20S以邮件形式发送当前经纬度及位置信息。该系统中有紧急按钮,可以在按下时对指定手机或座机发送求救电话。

项目难点:如何进行数据传输(同时期望较小耗电)

实现过程:
//Android实现发送邮件,首先需要依赖additional.jar、mail.jar和activation.jar这3个jar

//包。在Android系统中发送邮件是网络操作  属于耗时操作  所以我们发送的时候要在子

//线程中去发送

@Override
    public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {
        Marker marker;
        if (TencentLocation.ERROR_OK == error) {
            // 定位成功
            Log.v("this", "定位成功!");
            if (tencentLocation != null) {
                String lat = String.valueOf(tencentLocation.getLatitude());
                String lon = String.valueOf(tencentLocation.getLongitude());
                String address = tencentLocation.getAddress();
                LatLng position = new LatLng(Double.parseDouble(lat),Double.parseDouble(lon));

//自动发送邮件
                if(thread == null){
                    mail=new SendMail(lat,lon,address,mails);
                    thread=new Thread(mail);
                    thread.start();
                    marker = tencentMap.addMarker(new MarkerOptions()
                            .position(position)
                            .title(address)
                            .anchor(0.5f, 0.5f)
                            .icon(BitmapDescriptorFactory.defaultMarker())
                            .draggable(true));
                    marker.showInfoWindow();// 设置默认显示一个infoWindow
                }else {
                    marker=null;
                    thread=null;
                    mail=null;
                    mail=new SendMail(lat,lon,address,mails);
                    thread=new Thread(mail);
                    thread.start();
                    marker = tencentMap.addMarker(new MarkerOptions()
                            .position(position)
                            .title(address)
                            .anchor(0.5f, 0.5f)
                            .icon(BitmapDescriptorFactory.defaultMarker())
                            .draggable(true));
                    marker.showInfoWindow();// 设置默认显示一个infoWindow
                }

Log.v("this", "当前经度:" + lat + "当前纬度:" + lon + "当前地址:" + address);

tencentMap.setCenter(position);
            } else {
                // 定位失败
                Log.v("this", "定位失败!");
            }
        }
    }

/**
         * 状态回调接口
         * @param s
         * @param i
         * @param s1
         */
        @Override
        public void onStatusUpdate (String s,int i, String s1){

}

}

//发送邮件(类封装和执行线程):

package com.example.pp.shadow4;

import java.util.ArrayList;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

public class SendMail implements Runnable {
    String lat;
    String lon;
    String address;
    ArrayList<String> mails;

public SendMail(String lat,String lon,String address,ArrayList<String> mails){
        this.lat=lat;
        this.lon=lon;
        this.address=address;
        this.mails = mails;
    }
    @Override
    public void run() {
        try {
            EmailSender sender = new EmailSender();
            //设置服务器地址和端口,可以查询网络
            sender.setProperties("smtp.qq.com", "465");
            //分别设置发件人,邮件标题和文本内容
            sender.setMessage("mhuanyu@foxmail.com", "位置", "<h1>经度:<em>"+
                    lat+"<em/><br/>纬度:<em>"+lon+"<em/><br/>位置:<em>"+address+"<em/></h1>");
            //设置收件人
//            sender.setReceiver(new String[]{"peixingpeixing@qq.com","mhuanyu@foxmail.com"});
            sender.setReceiver(mails.toArray(new String[mails.size()]));
            //添加附件换成你手机里正确的路径
//             sender.addAttachment("/sdcard/ceshitest.txt");
            //发送邮件
            //sender.setMessage("你的163邮箱账号", "EmailS//ender", "Java Mail !");这里面两个邮箱账号要一致
            sender.sendEmail("smtp.qq.com", "mhuanyu@foxmail.com", "jgbiogsdrefsbaid");
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

package com.example.pp.shadow4;

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class EmailSender {
    private Properties properties;
    private Session session;
    private Message message;
    private MimeMultipart multipart;

public EmailSender() {
        this.properties = new Properties();
    }
    public void setProperties(String host,String post){
        //地址
        this.properties.put("mail.smtp.host",host);
        //端口号
        this.properties.put("mail.smtp.post",post);
        //是否验证
        this.properties.put("mail.smtp.auth",true);
        this.session=Session.getInstance(properties);
        this.message = new MimeMessage(session);
        this.multipart = new MimeMultipart("mixed");
    }

/**
     * 设置收件人
     * @param receiver 收件人
     * @throws MessagingException
     */
    public void setReceiver(String[] receiver) throws MessagingException {
        Address[] address = new InternetAddress[receiver.length];
        for(int i=0;i<receiver.length;i++){
            address[i] = new InternetAddress(receiver[i]);
        }
        this.message.setRecipients(Message.RecipientType.TO, address);
    }

/**
     * 设置邮件
     * @param from 来源
     * @param title 标题
     * @param content 内容
     * @throws AddressException
     * @throws MessagingException
     */
    public void setMessage(String from,String title,String content) throws AddressException, MessagingException{
        this.message.setFrom(new InternetAddress(from));
        this.message.setSubject(title);
//        this.message.setContent(content,"text/html;charset=gbk");
        //纯文本的话用setText()就行,不过有附件就显示不出来内容了
        MimeBodyPart textBody = new MimeBodyPart();
//        textBody.setText(content);
        textBody.setContent(content,"text/html;charset=utf-8");
        this.multipart.addBodyPart(textBody);
    }

/**
     * 添加附件
     * @param filePath 文件路径
     * @throws MessagingException
     */
    public void addAttachment(String filePath) throws MessagingException{
        FileDataSource fileDataSource = new FileDataSource(new File(filePath));
        DataHandler dataHandler = new DataHandler(fileDataSource);
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setDataHandler(dataHandler);
        mimeBodyPart.setFileName(fileDataSource.getName());
        this.multipart.addBodyPart(mimeBodyPart);
    }

/**
     * 发送邮件
     * @param host 地址
     * @param account 账户名
     * @param pwd 密码
     * @throws MessagingException
     */
    public void sendEmail(String host,String account,String pwd) throws MessagingException{
        //发送时间
        this.message.setSentDate(new Date());
        //发送的内容,文本和附件
        this.message.setContent(this.multipart);
        this.message.saveChanges();
        //创建邮件发送对象,并指定其使用SMTP协议发送邮件
        Transport transport=session.getTransport("smtp");
        //登录邮箱
        transport.connect(host,account,pwd);
        //发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        //关闭连接
        transport.close();
    }

}

项目小结:

本次项目最先是打算做两个app来实现数据传输,一个只负责发送,一个只负责接收;但是在实现的过程中发现,如果想要TCP连接的话,存在接收方的权限问题,且无法保证接收方服务一定开启。考虑到定位器对准确度的要求高,对路径规划的要求并不高,我们决定只需要接收方能够不间断接受到发送方的数据即可。考虑到短信的费用问题及对生活的干扰,我们决定通过恒定每20S发送一次邮件的方式。对于是否要增加位置判别来决定发送频率,我们选择不增加,因为如果增加的话会无法判断是儿童位置未改变还是遇到了潜在危险。虽然增加了一键报警功能,但依旧无法确保会不会发生儿童未来得及按键就已失去了按键的机会。

本次项目主要是对安卓程序设计的学习,及对操作系统和计算机网络的理解。通过实践学习安卓程序,通过查找资料来进行其接口的调用,初步接触了多线程的编写,通过对耗时操作开启子线程进行控制,及端口是如何在实践中发挥作用。

信息传输可以分为两个部分:

第一个部分:邮件传输,先是通过腾讯定位获得定位的详细信息,再对定位信息的封装通过邮件发送给父母。我认为这是最好的实现方式,

从经济可行性来分析:它的花费为0,所以可行,邮件我们不需要再自己配置服务器,而是利用现有服务商,可以是任何一个,比如现在用的qq邮箱,也可以用163邮箱等,更简单粗暴的是只要用个人邮件就可以,这个为我们的开发节约了不少的成本。

第二个是技术可行性来分析:javamail的技术经过长时间的发展,可以说是相当的成熟了,在传输文本信息这一块是相当的高效的,在当代办公中也是不可或缺的一种信息传输方式,它的延迟几乎可以忽略,这一点是相当的满足定位追踪的数据实时更新需求。而且发送邮件的形式可以高度自定义。因为利用的是现有邮件服务商,所以现有的邮件技术都可以实现,目前实现的只是自定义收件人的邮件地址,因为用的是一个List集合来存储地址,可以输入多个收件人,也就是小孩的监视人可以有一个以上,上不封顶。在这个应用中,还可以实现自定义得到小孩子位置信息的时间间隔,比如20秒收一次位置信息,也可以一分钟,也可以一个小时。这样一来,小孩子的位置信息可以说是实时掌握着,而所有的监视人都可以知道,可以说是相当的便利了。相较于点对点的两个客户端之间的信息传递方便了不止百倍。技术实现上也减少了难度。功能却一点不减。

第二个部分是一键报警功能。个人觉得这个功能很鸡肋,可以减去,在技术实现上没有什么的难度,但是考虑实际情况的话根本用不上。技术运用就是调用系统应用打电话的功能。唯一方便的是可以永久的设置紧急联系人,这个紧急联系人可以是亲人,也可以是急求电话。一旦设置好了之后就可以一键拨打紧急联系人,不需要再重复拨号码。

用到的技术:把所有有关技术控件或包列一下

功能演示:每个功能过程截图。

项目展示:

左为初始界面图,右为每20S发送一次的信息。

左图中右上角的小人可以输入选择发送的指定邮箱。

智能定位系统实验报告相关推荐

  1. 亚博 Arduino智能小车实验报告

    亚博 Arduino智能小车实践报告 一.     程序安装准备 首先安装了Arduino板载USB转串口CH340驱动安装包, 若上述程序安装成功,则可以在我的电脑中找到相应的端口 本机端口号为CO ...

  2. 单片机8位抢答器实训机电报告_CD4511八路抢答器实验报告-

    CD4511八路抢答器实验报告- 本文关键词:八路,实验,报告,抢答器,CD4511 CD4511八路抢答器实验报告- 本文简介:小学期实验设计任务目录摘要I第1章绪论11.1课题研究的相关背景11. ...

  3. 李萍matlab实验报告,基于实验报告自动批阅的系统分析

    .!i型 t问s,w~啊研究 -一■●■● --●0 基于实验报告自动枇阅昀系统分析 张二元 李 萍/重庆电子工程职业学院 [摘 要] 为了减轻实验老师工作量,使报告批阅更快捷.准确和 网络化:学生能 ...

  4. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...

    人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...

  5. 交换机的基本配置实验报告_无线网络设计配置即实验报告

    工程师ACK接到一个小型图书馆的网络组建项目,根据目前流行的网络组建以及项目地点的使用需要便捷性,采用AC控制的瘦AP模式.不需要AC来管理网络的AP是胖AP需要单独配置,有多少个AP就要配置多少次. ...

  6. 20145207《Java程序设计》实验二(Java面向对象程序设计)实验报告

    <Java程序设计>实验二(Java面向对象程序设计)实验报告 目录 改变 Java面向对象程序设计实验要求 实验成果 课后思考 改变 看了下之前实验二的整体,很搞笑,大图+代码,没了.. ...

  7. MATLAB实现智能计算方法实验:实验三 BP神经网络

    资源链接 MATLAB实现智能计算方法课程所有实验代码资源链接为:MATLAB实现智能计算方法课程所有实验代码资源 本实验代码和excel文件可在GitHub仓库和gitee仓库中进行下载 实验汇总 ...

  8. matlab的仿真实验报告答案,模糊控制MALTAB系统仿真实验报告

    可编程控制器 智能控制技术 仿真实验 题 目: 模糊控制系统MATLAB仿真实验报告 院系名称: 电气工程学院 专业班级: 电气 学生姓名: 学 号: 模糊控制系统MATLAB仿真实验报告 一. 实验 ...

  9. (精)Tableau数据可视化设计 实验报告

    (精)Tableau数据可视化设计 实验报告 前言:此为<数据可视化设计>课程实验报告(个人重现版).鉴于实验时发现教程所使用的Tablreau版本已经换代,且图片不清晰.故作此报告(当然 ...

最新文章

  1. oracle sql now函数,postgresql的now()与Oracle的sysdate区别说明
  2. 深度学习中的Normalization模型(附实例公式)
  3. 中国知名企业ERP失败案例深入剖析
  4. 【网络】HTTP基础总结
  5. DOS命令行中用MAVEN构建Java和Java Web项目
  6. linux 补丁脚本,Linux上打patch补丁包脚本全解
  7. 米家对讲机_对前面两代产品不断总结和完善的产物,米家对讲机2代开箱体验...
  8. 不允许创建临时变量,交换两个数的内容
  9. 状态模式(Strategy Pattern)
  10. 计算机配件对比,基本参数 尺寸对比 接口对比
  11. 2020.11.14--AE--图层八种形式、图层面板图标、查看器面板
  12. 超星网络学生登录入口 附使用教程
  13. PPT如何制作一级标题、二级标题
  14. Cant open /dev/sdb1exclusively.Mounted filesystem
  15. 长期成本曲线为何是短期成本曲线包络线?——用包络定理证明
  16. android 符号表情显示乱码,android输入框限制输入法中的表情符号
  17. 使用Scanner收集你的身高体重,并计算出你的BMI值是多少 BMI的计算公式是 体重(kg) / (身高*身高)
  18. 计算机操作系统——银行家算法
  19. 过期域名查询php程序,一个域名查询的程序
  20. 地图显示---英文、中英文地图

热门文章

  1. android面试之今日头条/字节跳动 android社招面试(附答案)
  2. 一键代理浏览器_支持IPv6的防关联指纹浏览器 VMLogin 支持模拟电脑名称、支持修改MAC地址、支持模拟真人输入、支持自定义经纬度...
  3. PS基础入门(一.橡皮檫的介绍)
  4. JS中数组(Array)、Json对象长度(length)获取方法
  5. phpyun 电脑调试wap版
  6. vue——this.$parent算法
  7. 今天是2019年大年三十儿,写了几幅字,给大家拜个年啦
  8. 史上最详细唇语识别数据集综述
  9. 如何将计算机桌面屏幕放大,电脑桌面内容放大怎么缩小
  10. 70条正则表达式的整理汇总