Tasker MIUI短信参数如何获取与使用?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 参数 正文

下面我将为你详细分解 MIUI 短信相关的 Tasker 配置,包括接收短信发送短信两个场景,并提供完整的参数列表和实例。

tasker miui短信参数
(图片来源网络,侵删)

核心概念:MIUI 的特殊性

MIUI 的短信应用(com.android.mms)在发送和接收短信时,不会完全遵循标准的 Android AOSP (Android Open Source Project) 规范,我们不能直接使用像 %SMSRB (短信接收框) 这样的标准变量。

MIUI 主要通过 Broadcast Receiver (广播接收器) 来传递短信信息,并且会将短信内容打包在一个特定的 Intent (意图) 中。


接收短信并处理

这是最常见的用法,比如自动回复、识别关键词并执行操作等。

配置步骤

  1. 创建新 Profile:

    tasker miui短信参数
    (图片来源网络,侵删)
    • 选择 Event (事件) -> Event (事件) -> State (状态) -> Hardware (硬件) -> Phone (电话)
    • Phone State 选项中,选择 Incoming SMS (接收短信)
  2. 进入 Task 编辑界面:

    点击进入刚刚创建的关联 Task。

  3. 添加 Action (动作):

    • 我们需要添加一个 Code (代码) 动作来解析 MIUI 发送的 Intent 数据。
    • 点击 号,选择 Task (任务) -> Code (代码)
    • Enter Code 窗口中,粘贴下面的代码。

解析短信的代码

这是最关键的一步,这段代码会从 MIUI 的 Intent 中提取出发送者、内容和时间戳。

tasker miui短信参数
(图片来源网络,侵删)
// 获取从 MIUI 短信应用发来的 Intent 对象
var intent = getIntent();
// 从 Intent 中获取短信内容
// MIUI 通常会将短信内容放在 "sms_body" 这个 key 里
var smsBody = intent.getStringExtra("sms_body");
// 从 Intent 中获取发送者号码
// MIUI 通常会将号码放在 "address" 这个 key 里
var senderNumber = intent.getStringExtra("address");
// 从 Intent 中获取时间戳 (毫秒)
var timestamp = intent.getLongExtra("timestamp", 0);
// 将解析出的信息保存到 Tasker 变量中,方便后续使用
// 使用 "let" 关键字创建全局变量
let SenderNumber = senderNumber;
let SMSBody = smsBody;
let SMSTimestamp = timestamp;
// (可选) 为了调试,你可以在通知栏显示这些变量,看看是否获取成功
// %SMSBODY, %SENDERNUMBER 等变量可以直接在其他 Action 中使用

代码解释:

  • getIntent(): 获取触发这个 Task 的原始 Intent 对象。
  • getStringExtra("sms_body"): 从 Intent 中以字符串形式获取短信正文。"sms_body" 是 MIUI 使用的 key。
  • getStringExtra("address"): 从 Intent 中以字符串形式获取发送者的电话号码。"address" 是标准的 key。
  • getLongExtra("timestamp", 0): 获取短信的时间戳。
  • let ... = ...: 这是 Tasker 中创建和赋值全局变量的标准语法,创建后,你就可以在其他任何 Task 的字段中使用 %SenderNumber, %SMSBody, %SMSTimestamp 这些变量了。

完整参数列表 (接收短信)

当你使用 getStringExtra()getLongExtra() 时,可以尝试从 Intent 中获取的参数有:

参数 Key (字符串) 类型 描述 备注
sms_body String 短信正文内容 最常用,MIUI 特有的 key。
address String 发送者/接收者号码 标准的 key,用于电话号码。
timestamp long 短信时间戳 (毫秒) 标准的 key,用于记录时间。
protocol int 短信协议类型 (如 0 for SMS) 较少使用。
status int 短信发送状态 (如 -1 for pending) 主要用于发送短信的回调。
sim_id int SIM 卡 ID 在双卡手机上非常有用,01

发送短信

使用 Tasker 发送短信,在 MIUI 上同样需要注意,因为标准的 Send SMS 动作有时会被 MIUI 的安全机制或短信拦截功能干扰。

推荐方法:使用 HTTP Request (最稳定)

这是最可靠的方法,它不依赖于 MIUI 的内部接口,而是调用系统的短信发送 API。

  1. 创建新 Task:

    • 点击 号,选择 Task (任务) -> Code (代码)
    • Enter Code 窗口中,粘贴下面的代码。
  2. 发送短信的代码

// 定义要发送的号码和内容
var phoneNumber = "10086"; // 替换成你要发送的号码
var messageText = "这是 Tasker 通过 HTTP API 发送的测试短信。";
// 使用系统自带的 SmsManager API 发送短信
// 这是 Android 标准方式,MIUI 一般无法拦截
var smsManager = SmsManager.getDefault();
// 将长短信分割成多条(如果需要)
// try-catch 是为了处理旧版本 Android API 的兼容性问题
try {
    var parts = smsManager.divideMessage(messageText);
    smsManager.sendMultipartTextMessage(phoneNumber, null, parts, null, null);
} catch (e) {
    // divideMessage 不可用,直接发送单条短信
    smsManager.sendTextMessage(phoneNumber, null, messageText, null, null);
}
// (可选) 显示通知,表示发送成功
flash("短信已发送至: " + phoneNumber, 2000);

代码解释:

  • SmsManager.getDefault(): 获取系统短信管理器。
  • smsManager.divideMessage(messageText): 将长文本分割成符合短信长度限制的多条消息,这是推荐的做法,可以避免发送失败。
  • smsManager.sendMultipartTextMessage(...): 发送分割后的多条短信。
  • smsManager.sendTextMessage(...): 发送单条短信(备用方案)。
  • flash(...): 在屏幕上短暂显示一条提示信息。

传统方法:使用 Send SMS 动作 (可能不稳定)

  1. 在 Task 中添加 Task (任务) -> Net (网络) -> HTTP Request (HTTP 请求)
  2. Method: 选择 POST
  3. URL: 留空或填入一个无效的 URL,因为我们不真正访问网络。
  4. Headers: 点击 Add,添加以下 Header:
    • Key: Content-Type
    • Value: application/x-www-form-urlencoded
  5. Body: 填写以下内容:
    phone=%PhoneNumber&msg=%MessageText

    这里的 %PhoneNumber%MessageText 是你预先在 Task 中用 Set Variable 动作定义好的变量。

  6. After Request: 选择 Do Nothing

为什么这个方法可能不稳定? MIUI 的“骚扰拦截”功能可能会检测到这种非标准的发送方式,并将其拦截。强烈推荐使用上面的 SmsManager 代码方法

完整参数列表 (发送短信)

当你构建发送短信的请求或代码时,会用到这些参数:

参数名称 描述 示例
PhoneNumber 目标手机号码 13800138000
MessageText 要发送的短信内容 你好,这是来自 Tasker 的消息。
SimId (可选) 指定使用哪个 SIM 卡发送 0 (卡1), 1 (卡2)

总结与最佳实践

功能 推荐方法 关键代码/参数 备注
接收短信 Profile: Incoming SMS + Code Action let SMSBody = getIntent().getStringExtra("sms_body");
let SenderNumber = getIntent().getStringExtra("address");
必须用代码解析,这是 MIUI 的核心特点。
发送短信 Code Action + SmsManager SmsManager.getDefault().sendTextMessage(...) 最稳定、最可靠,不受 MIUI 拦截影响。
发送短信 (不推荐) HTTP Request phone=%PhoneNumber&msg=%MessageText 可能被 MIUI 骚扰拦截功能阻止。

实用案例:自动回复“开会中”

  1. Profile:

    • Event: Phone -> Incoming SMS
    • Advanced (高级设置): Regex (正则表达式) 匹配 From (来源) -> (匹配所有号码)
  2. Task (名为 "AutoReply"):

    • Action 1: Code
      // 解析短信
      let SMSBody = getIntent().getStringExtra("sms_body");
      let SenderNumber = getIntent().getStringExtra("address");
    • Action 2: Code (发送回复)
      // 使用 SmsManager 发送自动回复
      var replyText = "您好,我正在开会,稍后回复您。";
      var smsManager = SmsManager.getDefault();
      try {
          var parts = smsManager.divideMessage(replyText);
          smsManager.sendMultipartTextMessage(SenderNumber, null, parts, null, null);
      } catch (e) {
          smsManager.sendTextMessage(SenderNumber, null, replyText, null, null);
      }
    • Action 3: Flash (显示通知)
      • Text: 已自动回复给 %SenderNumber
      • Duration: 3000 (毫秒)

只要你的手机收到任何短信,这个 Task 就会自动运行,解析出发送者号码,并向该号码发送预设好的“开会中”回复。

希望这份详细的指南能帮助你在 MIUI 系统上完美使用 Tasker 处理短信!

-- 展开阅读全文 --
头像
moto xt1570 拆机视频有何亮点或风险?
« 上一篇 今天
proone 400 G1 拆机后内部有何设计亮点?
下一篇 » 45分钟前

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]