在Android手机上使用Tasker制作天气应用

> 是的,没错! Tasker可以用来制作APP;天气,日历,计算器,记事本等是现代手机的标配,这些APP都是可以通过Tasker来制作的,本篇文章就是以天气应用为例来描述如何制作一款简单的Android APP.

制作之前先想好要实现的功能,设计美观的界面,并找到一个能满足需求的天气源(即提供天气信息的接口,本篇的天气源用的是 彩云天气 )

用Tasker制作一款典型的Android APP一般分为三个步骤: 1.场景制作(界面设计) 2.写配置 3.生成应用

一. 场景制作

场景:由场景元素组成的用来显示可交互界面的集合
在Tasker主界面上点击场景选项卡切换到场景查看和制作界面,点击右下的“+”按钮新建一个场景,设定场景名称后自动进入场景设计界面.

首先,设定场景的基本属性.点击右上的三点式汉堡菜单选择点击属性:

  1. 场景类型有活动,对话框和图层三种

  • 活动,我们常见到的app界面就是活动界面.
  • 对话框,相对于活动 只有对话框上面的控件可以点击,背景暗淡
  • 图层,相当于悬浮窗
  1. 场景大小(水平尺寸和垂直尺寸)和方向(横向布局和竖向布局)
  2. 场景背景色:可以填写颜色值或者变量,也可以点击放大镜按钮选择颜色
  3. 如无需求,其他一般默认即可
    其次,设定场景网格大小.网格有利于快速对其场景元素,大网格更方便更快速对齐元素,小网格的位置更精确.
    最后,添加元素,在设计元素的过程中,元素可以被复制,粘贴,删除,隐藏,固定位置,也可以设定深度,或者设为背景元素来铺满整个场景.
    最常用的元素:矩形,文本,可编辑文本,按钮,图片,菜单
  • 矩形:常来布局场景元素,设定场景整体背景和局部背景,也可以用来设定一组元素的共同行为(action)
  • 文本:不可编辑的标签
  • 可编辑文本:文本框
  • 按钮:常用的用来响应单击,长按等操作的行为
  • 图片:用来显示图片的元素
  • 菜单:常用来当做显示数组的文本标签

按照设计的尺寸大小和位置,添加各个元素到场景中

场景界面
右下角的放大镜按钮可以用来切换场景的状态(1.设置场景相对于手机屏幕的布局,2.设置场景内的元素)

触摸模式-选择模式
下中的”+”用于添加场景元素

新建模式-预览模式
下左的手掌图标用于选择触摸的模式(正常,编辑,移动,调整大小),一般选择正常。

下左的”AZ”列出了场景中所有的元素,长按列表中的选项,可以对元素进行删除,复制,焦点,设置深度,设置背景,钉住和隐藏。

元素编辑

二. 写配置(即逻辑配置)

关于数据解析,如果你会任何编程语言的话,理解起来比较容易,如果不会也没有关系,同样可以实现:

任务编辑
既可以使用JS中关于JSON对象的方法来实现,也可以使用Tasker自带的搜索替换功能来实现。

  1. 使用JS实现如下
//下面的两个api key 来自于网络可能随时失效,建议自行申请备用
var cytoken="2zHu=DbPVTvusLnq";//彩云天气api key
var amapkey="8c74fc85bfcd90e7df82fafd5097b40d";//高德地图api key
//定义 get 方法
function gethttp(url) {
var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange",
function() {
if (this.readyState === 4) {
    //flash(xhr.responseText)
}
});
xhr.open("GET", url, false);
xhr.send();
return xhr.responseText;
}
//通过网络获取手机坐标GPS
var lastFix = getLocation('net', true, 10);
var loc = global('%LOCN').split(",");
//手机坐标GPS转换为高德坐标
var loc0 = Number(loc[1]).toFixed(6);
var loc1 = Number(loc[0]).toFixed(6);
var convertUrl = "http://restapi.amap.com/v3/assistant/coordinate/convert?locations=" + loc0 + "," + loc1 + "&coordsys=gps&output=json&key="+amapkey;
var amapLoc = JSON.parse(gethttp(convertUrl)).locations.split(",");
//根据坐标获取当前行政区域信息
var loc0 = Number(amapLoc[0]).toFixed(6);
var loc1 = Number(amapLoc[1]).toFixed(6);
var regeoUrl = "http://restapi.amap.com/v3/geocode/regeo?output=json&location=" + loc0 + "," + loc1 + "&key="+amapkey+"&radius=100&extensions=all"
var result = JSON.parse(gethttp(regeoUrl));
var addressComponent = result.regeocode.addressComponent;
var contry = addressComponent.contry;
var province = addressComponent.province;
var city = addressComponent.city;
var district = addressComponent.district;
var townshipy = addressComponent.township;
var name = result.regeocode.pois[0].name;
var address = result.regeocode.pois[0].address;
//获取小时天气数据
var loc0 = Number(loc[1]).toFixed(4);
var loc1 = Number(loc[0]).toFixed(4);
var weatherUrl = "https://api.caiyunapp.com/v2/"+cytoken+"/" + loc0 + "," + loc1 + "/hourly.json"
//解析天气数据
var result = JSON.parse(gethttp(weatherUrl));
var hourly_description = result.result.hourly.description;
var forecast_keypoint = result.result.forecast_keypoint;
var wind = result.result.hourly.wind[0].speed + " km/h";
var humidity = result.result.hourly.humidity[0].value + " %";
var pmmm = result.result.hourly.pm25[0].value + "pm2.5";
var skycon = result.result.hourly.skycon;
var skycon0 = skycon[0].value;
var temperature = result.result.hourly.temperature;
var temperature0 = temperature[0].value + " ℃";
var pm25 = result.result.hourly.pm25;
var pm250 = pm25[0].value;
var weather={"CLEAR_DAY":"晴(白天)","CLEAR_NIGHT":"晴(夜间)", "PARTLY_CLOUDY_DAY":"多云(白天)", "PARTLY_CLOUDY_NIGHT":"多云(夜间)", "CLOUDY":"阴", "RAIN":"雨", "SNOW":"雪", "WIND":"风", "FOG":"雾", "HAZE":"霾", "SLEET":"冻雨"};
var skyconurl = {
"CLEAR_DAY": "android.resource://net.dinglisch.android.taskerm/drawable/mw_image_wb_sunny",
"CLEAR_NIGHT": "android.resource://net.dinglisch.android.taskerm/drawable/mw_image_brightness_3",
"PARTLY_CLOUDY_DAY": "android.resource://net.dinglisch.android.taskerm/drawable/mw_file_cloud_queue",
"PARTLY_CLOUDY_NIGHT": "android.resource://net.dinglisch.android.taskerm/drawable/mw_file_cloud_queue",
"CLOUDY": "android.resource://net.dinglisch.android.taskerm/drawable/mw_image_wb_cloudy",
"RAIN": "android.resource://net.dinglisch.android.taskerm/drawable/mw_places_beach_access",
"SNOW": "android.resource://net.dinglisch.android.taskerm/drawable/mw_places_ac_unit",
"WIND": "android.resource://net.dinglisch.android.taskerm/drawable/mw_device_grapheq",
"FOG": "android.resource://net.dinglisch.android.taskerm/drawable/mw_action_line_weight",
"HAZE": "android.resource://net.dinglisch.android.taskerm/drawable/mw_places_all_inclusive",
"SLEET": "android.resource://net.dinglisch.android.taskerm/drawable/mw_places_beach_access"
}

var pmm=pm25.map(function(tem){return tem.value + " " + "pm2.5"});
var temp=temperature.map(function(tem){return tem.value + " " + "℃"});
var hourtime=skycon.map(function(tem){return tem.datetime.substring(11)});
var sky=skycon.map(function(tem){return weather[tem.value]});
var strLength=function (str) {
  var strlen = str.length;
  var n = strlen;
  for (var i = 0; i < strlen; i++) {
    if (str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255) {
      n++;
    }
  }
  return str+" ".repeat(14-n);
}
var mweather=[]
for (var i=0;i<48;i++){
    mweather.push(hourtime.map(strLength)[i] + sky.map(strLength)[i]+pmm.map(strLength)[i] + temp.map(strLength)[i]);
}
console.log(mweather)
var weatherconurl=skyconurl[skycon[0].value]
var now = new Date((result.server_time) * 1000);
var server_time = (now.getHours()<10 ? "0" + now.getHours() : now.getHours()) + ":" + (now.getMinutes()<10 ? "0" + now.getMinutes() : now.getMinutes());
  1. 使用Tasker自带的变量拆分,变量搜索替换,设置数组等一系列操作也可以完成,具体可参考其他人分享的天气示例。

> 运行一次刚刚制作的配置,看看是否运行正常。

三. 生成应用

首先,安装Tasker对应版本的app factory这款应用(仅仅安装好就可以了)。

> app factory的版本号需要和Tasker的版本号严格对应,否则生成应用时会提示错误

然后,打开Tasker菜单>更多>开发人员选项>创建证书,来为应用生成一个签名,这一步很简单,按照提示操作就行了。注意设置一个简单好记的密码。

其次,切换到Tasker任务选型卡,长按刚刚创建的任务配置,点击右上菜单,选择导出>作为应用
设置以下选项

  1. 包名,类似于:com.android.appname 这种格式的;
  2. 版本名,例如:1.0
  3. 启动任务,可以点击右边的搜索按钮找到

以上三个选项设置好以后,点击手机返回按钮或者左上的返回按钮,这样Tasker就开始自动生成应用了。
安装刚刚生成的天气应用,打开就可以看到我们设计的天气应用界面了。

本页地址:[https://ishare.cf/2019/08/30/how-to-creat-a-android-app-by-tasker](https://ishare.cf/2019/08/30/how-to-creat-a-android-app-by-tasker “本页地址”)

最后修改于:2019-09-10 23:21:53 星期二

版权声明:本文为本站原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。:Tasker配置教程 » 在Android手机上使用Tasker制作天气应用

赞 (2) 打赏

评论 1

  1. 匿名放上图片,以方便参考回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏