0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Autojs后台静默发短信

汽车电子技术 来源:安卓脚本 作者:Dcrclub 2023-03-03 13:47 次阅读

唉, 安卓代码转成autojs使用的代码,有些代码的转换真的是蛋疼的很,一个小小的问题.折腾了我三天,到处翻资料, 到头来答案却在眼皮子上挂着...不说了,丢人...

想要使用autojs在后台静默发送短信很简单,简简单单一句代码就搞定,但是还得需要判断是否发送成功了, 对方是否接收成功了等等问题.

//Autojs Code:
importClass(android.telephony.gsm.SmsManager);
SmsManager.getDefault().sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);

说一下各个参数的意义: 以实际传的参数来说明,只说作用,不说官方解释

phoneNumber : 就是接收短信的手机号码, string类型,

null : 短信服务中心号码, 默认null,

msg : 短信内容, 因为是sendTextMessage,所以这个参数是string类型,

sentPI : 发送时要触发的intent,

deliverPI : 对方接收到短信所触发的intent

要判断是否发送成功和接收成功,就需要注册两个广播的监听.来得到结果.下面分别记录一下免费版Autojs和AutojsPro8.0以上的版本如何注册一个监听.

免费版注册监听的方式

/**
 * 免费版autojs注册监听
 */
var sendMessageFilter=new IntentFilter();
sendMessageFilter.addAction(SENT_SMS_ACTION);
var sendMessage = new JavaAdapter(android.content.BroadcastReceiver, {
    onReceive : function(context, intent) {
        let phone = intent.getStringExtra("KEY_PHONENUM");
        let message = intent.getStringExtra("KEY_MESSAGE");
        switch (sendMessage.getResultCode()) {
            case Activity.RESULT_OK:
                console.log("给手机号码: " + phone + " 发送短信成功");
                console.log("发送的内容: " + message);
                break;
            default:
                console.log("给手机号码: " + phone + " 发送短信成功");
                break;
        }
    }
});
context.registerReceiver(sendMessage,sendMessageFilter);


var receiverFilter=new IntentFilter();
receiverFilter.addAction(DELIVERED_SMS_ACTION);
var receiver = new JavaAdapter(android.content.BroadcastReceiver, {
    onReceive : function(context, intent) {
        let phone = intent.getStringExtra("KEY_PHONENUM");
        console.log("手机号: " + phone + " 接收短信成功");
    }
});
context.registerReceiver(receiver, receiverFilter);

以下是Pro8.0以后的版本注册监听的方式:

/**
 * autojsPro 8.0以上的版本使用的监听
 */
 //发送短信的监听
let sendMessage = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    let message = intent.getStringExtra("KEY_MESSAGE");
    switch (sendMessage.getResultCode()) {
        case Activity.RESULT_OK:
            console.log("给手机号码: " + phone + " 发送短信成功");
            console.log("发送的内容: " + message);
            break;
        default:
            console.log("给手机号码: " + phone + " 发送短信成功");
            break;
    }
});
context.registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));


//对方接收短信的监听
let receiver = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    console.log("手机号: " + phone + " 接收短信成功");
});
context.registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));

监听的注册, 自己根据当前手机所使用的的Autojs版本自己选择,或者自己做成一个函数判断后再注册.

快要下班了, 我还是直接通过整个脚本来讲解其他的吧!

importPackage(android.content);


importClass(android.telephony.gsm.SmsManager);
importClass(android.app.PendingIntent);
importClass(android.app.Activity)


//监听脚本的结束事件,结束后,注销两个监听,否则会一直再后台监听着...
events.on("exit", () => {
    context.unregisterReceiver(receiver);
    context.unregisterReceiver(sendMessage);
});


/**发送与接收的广播**/
const SENT_SMS_ACTION = "SENT_SMS_ACTION";
const DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";


//这里先注册两个监听,一个是发短信成功后的监听, 一个是对方接收短信成功
//的监听,短信发送失败后的逻辑可以写在这里.
let sendMessage = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    let message = intent.getStringExtra("KEY_MESSAGE");
    switch (sendMessage.getResultCode()) {
        case Activity.RESULT_OK:
            console.log("给手机号码: " + phone + " 发送短信成功");
            console.log("发送的内容: " + message);
            break;
        default:
            console.log("给手机号码: " + phone + " 发送短信成功");
            break;
    }
});
context.registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));


let receiver = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    console.log("手机号: " + phone + " 接收短信成功");
});
context.registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));


var phoneArray = ["电话号码", "电话号码"];
for (let i in phoneArray) {
    sendMessages(phoneArray[i], "今天也是元气满满的一天呢!!!", i);
    sleep(100);
}
//保持脚本持续运行,不会提前注销监听事件. 代码执行完自己手动结束脚本.
//这里我没优化的更人性化一些...
while (true) {
    // sendMessages("10010", "也是元气满满的一天呢!!!");
    sleep(60 * 1000);
}


/**
 * 发短信的函数
 * @param {string} phoneNumber  手机号码
 * @param {string} message      要发送的文字短信
 * @param {int} rescode         短信广播的标识,只要是个int类型的数字即可,每条短信使用不同的标识号,确保监听可以正确识别
 */
function sendMessages(phoneNumber, message, rescode) {
    let sms = SmsManager.getDefault();


    let sentIntent = new Intent(SENT_SMS_ACTION);
        sentIntent.putExtra("KEY_PHONENUM", phoneNumber);
        sentIntent.putExtra("KEY_MESSAGE", message);
    //这里需要说一下: rescode是广播标识,用来区分不同手机号的短信,
    //PendingIntent.FLAG_ONE_SHOT 这个是说,该广播只使用一次.再有相同的rescode标识的广播被接收到时,不做处理.
    let sentPI = PendingIntent.getBroadcast(context, rescode, sentIntent, PendingIntent.FLAG_ONE_SHOT);
    // log("sentPI : " + sentPI);


    let deliverIntent = new Intent(DELIVERED_SMS_ACTION);
        deliverIntent.putExtra("KEY_PHONENUM", phoneNumber);
    let deliverPI = PendingIntent.getBroadcast(context, rescode, deliverIntent, PendingIntent.FLAG_ONE_SHOT);
    // log("deliverPI : " + deliverPI);

    /**
     * 这里是判断短信内容如果大于70个字, 就需要分两条或者多条短信发送出去.
     */
    if (message.length > 70) {
        let msgs = sms.divideMessage(message);
        for (let i in msgs) {
            let msg = msgs[i]
            sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);
        }
    } else {
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
    }
}

好了下班前, 把这个折腾好几晚上的问题.搞定. 希望可以帮助更多的人. 折腾不易. 希望得到帮助的小哥哥们,打赏一下. 谢谢啦...

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 版本
    +关注

    关注

    0

    文章

    15

    浏览量

    9472
  • 监听
    +关注

    关注

    0

    文章

    22

    浏览量

    8325
  • 注册
    +关注

    关注

    2

    文章

    7

    浏览量

    11247
收藏 人收藏

    评论

    相关推荐

    想做个触发警报会自动发短信的 业余技术求指导

    如题想做个12V触发警报会自动发短信的 业余技术求指导触发警报那块已经搞好了不过因为技术问题 自动发送指定短信息到手机那块不会求指导!!
    发表于 04-29 15:41

    51单片机控制SIM900A发短信问题

    怎么通过矩阵键盘输入电话号码实现发短信功能,现在只能实现给固定的号码发短信,求大神们指点!
    发表于 08-30 20:34

    GSM短信模块,如何用GSM短信模块,单片机,给手机发短信

    如题,想用GSM短信模块,如何用GSM短信模块,单片机,给手机发短信。谁有原理图、操作步骤和程序
    发表于 03-12 20:12

    用STM32操控GSM模块发短信有什么推荐的模块吗

    想学下用STM32操控GSM模块发短信,不知道大家有什么不错的模块好推荐?
    发表于 01-21 23:01

    请问有STM32控制GSM发短信的代码吗?

    买开发板回来后,最近几天都在研究STM32控制GSM发短信。。。想求个程序STM32 PA1管脚收到低电平,就控制GSM卡,发送短信“老婆你好”,到152*******我老婆手机上。。。原子哥,关于GSM只有短视频教程,小弟还是有点看不懂。。。想做个小东西惹老婆开心,谁给
    发表于 03-18 22:15

    stm32 gsm TC35发短信

    最近在调gsm,在网上找了好长时间的资料也没找到,stm32 gsm发短信的程序,所以自己写了个,为了大家可以更好的学习gsm。在min stm32上已经成功,注意当stm32与gsm连接后,最好按下复位键。STM32发短信成功 .zip (652.1 KB )
    发表于 03-21 06:35

    请问有GSM模块简化的只有收发短信的程序吗?

    工程里面多余的文件全都不要,只要能保证收发短信就可以,谢谢大神们。。
    发表于 04-19 06:36

    wince+gprs收发短信源码

    wince+gprs收发短信源码 部分代码如下:// GPRS.h: interface for the CGPRS class.//////////////////////////////////////////////////////////////////////// #if !defined(AFX_G
    发表于 03-20 14:11 148次下载

    轻松上手 无线上网使用之双剑合并发短信

    轻松上手 无线上网使用之双剑合并发短信 由于手机本身的体积限制而没有专用键盘,目前来说,许多短信一族都只好去练就一身“一
    发表于 01-26 11:04 697次阅读

    基于Android平台的自发短信系统设计与实现

    基于Android手机操作系统开发了一款自发短信系统。利用SQLite数据库存储技术、Service启动服务技术及Runnable接口,设计并实现了好友管理、短信管理、后台检测发送短信
    发表于 09-25 14:54 25次下载

    使用51单片机控制收发短信的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机控制收发短信的程序免费下载。
    发表于 05-30 17:55 12次下载
    使用51单片机控制收<b class='flag-5'>发短信</b>的程序免费下载

    使用单片机实现收发短信的设计资料说明

    借助系统模型,阐明GSM模块收发短信的基本概念以及串口控制SMS的基本原理。详细介绍单片机控制GSM模块工作的软件实现过程,对怎样用单片机控制GSM模块收发短信进行探讨,也对程序设计的主体思想作了较为细致的分析。
    的头像 发表于 07-18 11:08 4711次阅读

    使用Arduino实现GSM模块SIM900A发短信的实验免费下载

    本文档的主要内容详细介绍的是使用Arduino实现GSM模块SIM900A发短信的实验免费下载。
    发表于 03-12 15:24 53次下载

    巨控GRM530让你的PLC给你打电话发短信通知方案

    GRM530让你的PLC给你打电话发短信
    的头像 发表于 11-03 09:14 2289次阅读
    巨控GRM530让你的PLC给你打电话<b class='flag-5'>发短信</b>通知方案

    Autojs多卡手机后台静默发送短信

    第三方应用发送短信,需要授予短信权限.没有权限的话. 没法运行本文中的代码. 申请短信权限,包括怎么在AndroidManifast.xml文件中声明权限,百度一下就有答案. 这里不赘述了, pro版的
    的头像 发表于 03-03 10:26 2328次阅读