衡阳派盒市场营销有限公司

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

    瀏覽量

    9496
  • 監聽
    +關注

    關注

    0

    文章

    22

    瀏覽量

    8360
  • 注冊
    +關注

    關注

    2

    文章

    7

    瀏覽量

    11271
收藏 人收藏

    評論

    相關推薦

    想做個觸發警報會自動發短信的 業余技術求指導

    如題想做個12V觸發警報會自動發短信的 業余技術求指導觸發警報那塊已經搞好了不過因為技術問題 自動發送指定短信息到手機那塊不會求指導?。?/div>
    發表于 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 ?708次閱讀

    基于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 ?4781次閱讀

    使用Arduino實現GSM模塊SIM900A發短信的實驗免費下載

    本文檔的主要內容詳細介紹的是使用Arduino實現GSM模塊SIM900A發短信的實驗免費下載。
    發表于 03-12 15:24 ?53次下載

    巨控GRM530讓你的PLC給你打電話發短信通知方案

    GRM530讓你的PLC給你打電話發短信
    的頭像 發表于 11-03 09:14 ?2423次閱讀
    巨控GRM530讓你的PLC給你打電話<b class='flag-5'>發短信</b>通知方案

    Autojs多卡手機后臺靜默發送短信

    第三方應用發送短信,需要授予短信權限.沒有權限的話. 沒法運行本文中的代碼. 申請短信權限,包括怎么在AndroidManifast.xml文件中聲明權限,百度一下就有答案. 這里不贅述了, pro版的
    的頭像 發表于 03-03 10:26 ?2457次閱讀
    中华百家乐官网的玩法技巧和规则 | 至尊百家乐奇热| 百家乐游戏策略| 百家乐斗牛稳赚| 百家乐下对子的概率| 百家乐稳赢投注方法| 线上百家乐代理| 韩国百家乐的玩法技巧和规则| 真人百家乐出售| 百家乐论坛bocaila| 太子百家乐官网的玩法技巧和规则 | 百家乐官网太阳城球讯网| 温泉县| 大亨百家乐官网娱乐城| 澳门百家乐官网怎么赢钱| 伯爵百家乐官网娱乐场| 百家乐官网开闲几率| 2024年九宫八卦吉位| 真人百家乐平台下载| 同乐城百家乐娱乐城| 大发888手机版客户端| 大玩家娱乐城| 开心8百家乐官网娱乐城| 百家乐官网双峰县| 新思维百家乐投注法| 巴厘岛百家乐娱乐城| 财神娱乐城信誉| 网上玩百家乐官网好吗| 皇冠百家乐官网在线游戏| 百家乐投注网中国| 赌场百家乐图片| 一起pk棋牌游戏下载| 金赞百家乐官网现金网| 天堂鸟百家乐官网的玩法技巧和规则| 百家乐赌博机假在哪里| 大发888 今日头条| 在线百家乐官网| 诺贝尔百家乐官网的玩法技巧和规则 | 微信百家乐群资源| 全讯网导航| 百家乐官网赌博规|