zoukankan      html  css  js  c++  java
  • Android Tasker应用之自动查询并显示话费流量套餐信息

    虽然Android平台有非常多的流量监控软件,但最准确的流量数据还是掌握在运营商手里。有些朋友可能像我一样时不时地发短信查询流量信息,这个操作在智能手机上显得太不智能了,本文将用Tasker让这个操作变得智能化。

    1、功能需求:

    • 每天早上闹钟响时,Tasker自动发送短信给运营商查询套餐信息。收到短信后Tasker自动分析短信内容,并将话费余额,流量信息等显示在桌面上。
    • 用户可以手动随时给运营商发短信查询,Tasker自动判断为套餐查询信息后提取信息并显示。
    • 显示的内容包括更新时间、当前话费、话费余额、剩余流量、剩余语音时长(由运营商提供的信息确定)

    最终需要实现的效果:

    data plan

    data plan

    2、实现分析

    整个操作由两个部分组成:

    • 发送部分:早上闹钟响起时自动给运营商发送一条短信查询套餐信息;
    • 接收部分:当收到运营商的套餐信息(可以是自动查询或手动查询的结果)后自动分析短信内容并显示。

    发送部分比较比较好实现,可以建立一个自动发短信任务,这个任务由闹钟响起事件触发。另外为了避免其它时候的闹钟触发这个任务,可以增加一个时间限制,比如只有在早上7点到8点之间的闹钟才能触发。

    接受部分由一个短信监听任务完成,每次收到短信时将触发这个任务。这个任务首先判断短信发送者是不是运营商,然后判断短信内容是不是查询套餐的短信(使用正则表达式匹配特征字符串),最后就是提取有用信息并发到前端(Minimalistic Text)显示。


    3、自动发送短信

    新建一个Profile,增加两个条件(Context):事件条件为"Alarm Clock",事件条件为7:00~9:00;

    添加一个发送短信的任务,内容为"101",接收者为"10010"(根据你的运营商和套餐查询命令而定)。

    你可以直接导入我配置好的Profile(针对中国联通3G套餐),点击下载:send_sms_on_alarm.prf,导入后的Profile如下图:

     

    profile send sms on alarm

    4、短信内容提取

    注:各个运营商的套餐查询短信不容,这里以中国联通为例。

    新建一个Profile,事件(Event)为"Received Text"并且Sender为"10010";

    添加一个匿名任务;

    Profile里已经完成了短信发送者的过滤,因此在Task里收到的短信肯定是10010发的,但是10010发的不一定是套餐查询短信,也可能是广告,因此需要判断是否是套餐短信,这里使用正则表达式来完成。联通3G短信的大致匹配为"^尊敬的[\s\S]*您当前套餐为[\s\S]*本月可用金额[\s\S]*含国内手机上网流量"。

    确信短信内容无误后就可以进行信息提取了,下面是一条完整的话费查询信息:

    尊敬的某某用户,您当前套餐为WCDMA(3G)-46元基本套餐B套餐。本月可用金额为54.49元。当前实时话费合计71.44元,3G套包内含国内语音拨打时长120分钟,现已使用20分钟;含国内手机上网流量40MB,现已使用0MB;含国内可视电话拨打时长5分钟,现已使用0分钟;含多媒体使用量3M,现已使用0M;含文本使用量5T,现已使用0T。本次查询结果存在时延,敬请留意。广东联通。【买3G就上 10010.com】

    Tasker内置了字符串操作函数,我们可以直接使用它来切割字符串,我们将上面这段内容赋值给%mmsgb变量,下面是具体的步骤:

    STEP 1:
    输入:        mmsgb
    分隔符:"本月可用金额为"
    结果:
    mmsgb1: 尊敬的某某用户,您当前套餐为WCDMA(3G)-46元基本套餐B套餐。
    mmsgb2: 115.43元。当前实时话费合计71.74元,3G套包内含国内语音拨打时长120分钟,现已使用13分钟;含国内手机上网流量40MB,现已使用20MB;含国内可视电话拨打时长5分钟,现已使用0分钟;含多媒体使用量3M,现已使用0M;含文本使用量5T,现已使用0T。本次查询结果存在时延,敬请留意。广东联通。【买3G就上 10010.com】

    STEP 2:
    输入:      mmsgb2
    分隔符: "。当前实时话费合计"
    结果: mmsgb21: 115.43元 (话费余额信息)
    mmsgb22: 71.74元,3G套包内含国内语音拨打时长120分钟,现已使用13分钟;含国内手机上网流量40MB,现已使用20MB;含国内可视电话拨打时长5分钟,现已使用0分钟;含多媒体使用量3M,现已使用0M;含文本使用量5T,现已使用0T。本次查询结果存在时延,敬请留意。广东联通。【买3G就上 10010.com】

    原文链接:http://www.software8.co/wzjs/yidongkaifa/2954.html

    提示:Tasker的字符串分割功能会自动将结果保存到数组中,如果你学过编程的话,应该很容易看出mmsgb21其实就是mmsgb[2][1]的意思,只不过Tasker的数组没有方括号而已。

    按上面的步骤依次提取剩下的信息,你也可以下载我配置好的Profile(只对联通3G套餐有效),点击下载:send_sms_to_check_phone_quota_recv_.prf

    5、信息显示

    前端依然使用Minimalistic Text来显示,在短信接收的Profile中有一个动作是将提取出的内容发送给Minimalistic Text 的"%DPQUOTA"变量,我们只需在Minimalistic Text里配置显示就可以了。

    先添加一个3x1的Widget,排版方式为自定义,然后添加一个本地变量就可以显示了,板式可以自己美化一下。

     

    最后手动发条短信测试一下吧,如果显示没问题的话以后每天早上这个过程都可以由Tasker自动完成了。

    更新日志:

    2012-11-22:

    使用py4a脚本可以在收到短信后可以自动删除或标记短信已读,需要这个功能的朋友可以可以参考py4a的API文档:http://code.google.com/p/android-scripting/wiki/ApiReference。下面是一段删除联通的未读短信的示例代码:

    1."""Delete unread msg from China Unicom.""" 
    2. 
    3.__author__ = 'Lance Liao' 
    4.__copyright__ = 'Copyright (c) 2012, ShuYZ.com' 
    5. 
    6.import android 
    7. 
    8.droid = android.Android() 
    9.msgIDs = droid.smsGetMessageIds(True, 'inbox').result # List all unread msg by ID 
    10.if(msgIDs.__len__() > 0): 
    11.    for msgID in msgIDs: # Check if the msg is send from China Unicom 
    12.        if ('10010' == droid.smsGetMessageById(msgID).result[u'address']): 
    13.            droid.smsDeleteMessage(msgID) #delete msg 

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/wwwroot/p/2932353.html
Copyright © 2011-2022 走看看