本帖最后由 huolicoder 于 2024-6-5 16:42 编辑
序
前阵子骑着小踏板摩托车兜兜转转一个多月。从福建到云南。的确见识了国家的基建和不同地区的美丽风景与风土人情。但是也有一点也是更重要的----安全。无论走到哪里,老婆都会叮嘱隔一会记得在微信上发个位置报平安。的确安全始终是最重要的考虑问题。回来后打开电脑不知道要做什么,想起了一个在路上的时候泛起的一个想法。就是做一个App,每隔10分钟自动将我的当前位置坐标、手机电量等关键信息发送到服务器显示在网页上。确保在旅途中的信息可以及时记录并分享给家人。这样,即使在偏远或不熟悉的地区,也能确保自己的位置被实时更新发送,从而在紧急情况下得到及时的帮助。
需求分析
位置追踪功能,隔几分钟自动更新位置坐标
紧急求助功能,添加紧急联系人可快速拨打电话和发送短信并提供实时位置
设计思路、代码工具选择
PHP,用于信息保存和查看
E4A:国产安卓开发工具,功能需求比较简单,没有性能要求,选择这样的工具更方便
理论存在,开始实践
PHP部分代码如下:
[PHP] 纯文本查看 复制代码 <?php
// 定义留言数据文件的路径
$filePath = 'messages.json';
// 加载留言数据
function loadMessages() {
global $filePath;
if (file_exists($filePath)) {
$data = file_get_contents($filePath);
return json_decode($data, true);
}
return [];
}
// 保存留言数据
function saveMessages($messages) {
global $filePath;
file_put_contents($filePath, json_encode($messages));
}
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$messages = loadMessages();
$ip = $_POST['ip'];
$txt = $_POST['txt'];
$time = time();
$messages[] = ['ip' => $ip, 'txt' => $txt, 'time' => $time];
saveMessages($messages);
header('Location: index.php');
exit;
}
// 获取留言数据并显示
$messages = loadMessages();
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>摩旅信息</title>
</head>
<body>
<h1>摩旅</h1>
<form action="index.php" method="post">
<input type="text" name="ip" placeholder="ip" required>
<br>
<textarea name="txt" rows="5" cols="30" placeholder="..." required></textarea>
<br>
<input type="submit" value="Post Message">
</form>
<hr>
<?php foreach ($messages as $message): ?>
<p><strong><?= htmlspecialchars($message['ip']) ?>:</strong> <?= htmlspecialchars($message['txt']) ?></p>
<p><small><?= date('Y-m-d H:i:s', $message['time']) ?></small></p>
<hr>
<?php endforeach; ?>
</body>
</html>
E4A部分代码:
[HTML] 纯文本查看 复制代码
事件 主窗口.创建完毕()
'安卓6.0以上的系统需要动态申请权限,否则app可能无法正常运行
如果 权限操作1.取系统版本号()>=23 则
权限操作1.申请全部权限()
结束 如果
结束 事件
事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())
如果 位置传感器1.设备是否有效() = 真 则
如果 位置传感器1.设备是否已开启() = 假 则
信息框("提示","请先开启定位服务","确定")
位置传感器1.打开设置界面()
否则
位置传感器1.开始监测()
结束 如果
结束 如果
结束 事件
事件 手机1.电池状态改变(状态 为 整数型,剩余电量 为 整数型,温度 为 整数型)
标签2.标题 = "当前手机状态:剩余电量" & 剩余电量 & "%;电池温度:" & 温度/10 & "°"
结束 事件
事件 位置传感器1.位置改变(纬度 为 双精度小数型,经度 为 双精度小数型,海拔 为 双精度小数型,速度 为 双精度小数型,方向 为 双精度小数型)
标签3.标题 = "当前经纬度:" & 位置传感器1.取经度() & "," & 位置传感器1.取纬度()
标签4.标题 = "当前海拔:" & 取整(位置传感器1.取海拔()) & "米, 速度:" & 位置传感器1.取速度() & "km/h"
结束 事件
事件 按钮1.被单击()
手机1.拨号("123456789")
手机1.打开扬声器()
结束 事件
事件 按钮2.被单击()
手机1.拨号("1234567890")
手机1.打开扬声器()
结束 事件
事件 按钮3.被单击()
位置传感器1.开始监测()
标签3.标题 = "当前经纬度:" & 位置传感器1.取经度() & "," & 位置传感器1.取纬度()
标签4.标题 = "当前海拔:" & 取整(位置传感器1.取海拔()) & "米, 速度:" & 位置传感器1.取速度() & "km/h"
结束 事件
事件 按钮4.被单击()
多线程1.开始发送网络数据("IP/index.php","ip=" & 标签2.标题 & "&txt=" & 标签3.标题 & 标签4.标题,"UTF-8")
结束 事件
事件 按钮5.被单击()
时钟1.时钟周期 = 50000
'隔5分钟自动发送一次信息
结束 事件
事件 按钮6.被单击()
启动应用("com.autonavi.minimap")
'打开高德地图
结束 事件
事件 时钟1.周期事件()
多线程1.开始发送网络数据("IP/index.php","ip=" & 标签2.标题 & "&txt=" & 标签3.标题 & 标签4.标题,"UTF-8")
结束 事件
效果
只要app常驻后台,或手动更新数据,在网页上就可以查看当前设备和位置信息。如下:
复盘&改进
思路大概就是这样,分享记录一下。还有很多细节有待改进。如安卓获取位置信息可采用高德地图的库直接获取省市县镇村街道等信息也更加精准。 |