目标:收到指定短信后自动回复位置信息
提示:请确保时间充足,再阅读此文章。
切换到 配置文件 选项卡,点击右下角 + 号按钮,新建一个配置文件。
输入配置文件名称“短信定位”,点击勾号确认。
然后,会出现 条件 类别选项,选择 事件。
之后,会出现选择 事件 类别的对话框,选择 电话。
选择 收到信息。
设置类型为 短信,发送者可选,非空则代表只有这些号码能够激活此配置文件,内容设置为“定位/位置”(即当短信内容为“定位”或“位置”时激活)
返回,出现关联任务选择对话框,选择新建任务。
不需要填写任务名,直接点击勾号确认。
点击右下角 + 号按钮新建一个操作,出现操作类别选择对话框。
选择 位置 类别,然后选择 获取位置 操作。
源设置为 GPS,代表获取GPS的定位结果,超时可以任意设置,建议设置较长些,原因是GPS定位耗时较长,选中 遇到错误后继续进行任务。
返回,可以看到新建的操作,长按它,在右上角菜单中找到 插入操作 以在其上方新建操作
由于刚才在配置文件中没有限制发送方电话号码,所以在任务中判断是否为联系人。
从 电话 类别中找到 测试电话 操作,设置类型为 联系人名称,设置数据为 %evtprm2(%evtprm 是一个数组变量,存储事件类别的条件所收到的数据,这里的 %evtprm2 是指收到短信的发送方电话号码),保存数据到 %name 变量。
通过右下角 + 号按钮新建一个操作,在 任务 类别中找到 If ,左侧填写 %name ,右侧填写 %name ,中间使用 匹配 运算符,用途是判断 %name 变量是否为空。
长按这一操作,将其拖动到第1操作和第2操作之间。
然后点击刚刚创建的 If 操作,编辑这项操作,将运算符由 匹配 更改为 不匹配。
再创建一个 If 操作,判断 %LOC 变量是否为空。
再新建一个操作,从 电话 类别中找到 发送短信,号码填写 %evtprm2 ,也就是收到短信的发送方号码,内容填写 “定位成功,经纬度:%LOC”。
继续新建任务,从 任务 类别中找到 Else。
什么都不用填,返回,长按刚刚的发送短信操作,点击 复制 图标按钮(长按可查看图标所对应的说明。
长按刚刚的 Else 操作,在右上角菜单中选择 粘贴到下方。
点击编辑,修改短信内容为“定位失败”。
新建两个操作,从 任务 类别中找到 End ,结束刚刚的两个 If。
基本完成!当然这样还是不能使用的,只有经纬度怎么够?
接下来,进行一些小修改:
通过 JavaScript 请求高德逆地理编码API并处理结果,得到当前地址描述。
将已有的经纬度数据拼接到高德的URI API,得到地图链接。
使用新浪短网址接口,缩短网址防止超出短信字数限制导致发送2条短信。
逆地理编码及URI API拼接的 JavaScript(保存在变量 %loctext 及 %locuri):
//随便整理了下,比较乱,呵呵...
//更新了下发现空格都没了,重要的空格补上了,缩进什么的...自行...嗯
const key="";//高德地图LBS平台申请的Key
var loctext="";
var locuri="";
let httpGet=(url)=>{
let xmlHttp=newXMLHttpRequest();
xmlHttp.open("GET",url,false);
xmlHttp.send("");
return xmlHttp.responseText;
}
let loc=global("LOC");
if(loc){
loc=loc.split(",").reverse().join(",");//由于高德地图wgs84坐标与正常的wgs84坐标经纬度相反(经度在前),倒转经纬度
locuri="http://uri.amap.com/marker?position="+loc+"&name="+encodeURIComponent(global("DEVMOD")+""+"精度"+global("LOCACC")+"米")+"&coordinate=wgs84";//URI API 拼接
try{
//高德地图逆地理编码
let result=httpGet("http://restapi.amap.com/v3/geocode/regeo?parameters&coordinate=wgs84&location="+loc+"&key="+key);
result=JSON.parse(result);
if(result.status=="1"){
let regeo=result.regeocode.addressComponent;
loctext=(regeo.city?regeo.city:regeo.province)+""+regeo.district+""+regeo.township+""+regeo.streetNumber.street+""+regeo.streetNumber.number;
}else
loctext="逆地理编码失败";
}catch(e){
loctext="逆地理编码出错";
}
}else
loctext="定位失败";
setLocal("loctext",loctext);
setLocal("locuri",locuri);
其它的自己做
嗯不用自己做了我帮你做好了...
点击此处导入配置文件而点击此处让Tasker崩溃注:要求Tasker版本为5.3及以上,请使用“在浏览器中打开”
很抱歉之前提供的配置文件未经测试出现异常,现已修复并简化
最终效果: