0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Autojs后臺(tái)靜默發(fā)短信

汽車電子技術(shù) ? 來源:安卓腳本 ? 作者:Dcrclub ? 2023-03-03 13:47 ? 次閱讀

唉, 安卓代碼轉(zhuǎn)成autojs使用的代碼,有些代碼的轉(zhuǎn)換真的是蛋疼的很,一個(gè)小小的問題.折騰了我三天,到處翻資料, 到頭來答案卻在眼皮子上掛著...不說了,丟人...

想要使用autojs在后臺(tái)靜默發(fā)送短信很簡(jiǎn)單,簡(jiǎn)簡(jiǎn)單單一句代碼就搞定,但是還得需要判斷是否發(fā)送成功了, 對(duì)方是否接收成功了等等問題.

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

說一下各個(gè)參數(shù)的意義: 以實(shí)際傳的參數(shù)來說明,只說作用,不說官方解釋

phoneNumber : 就是接收短信的手機(jī)號(hào)碼, string類型,

null : 短信服務(wù)中心號(hào)碼, 默認(rèn)null,

msg : 短信內(nèi)容, 因?yàn)槭莝endTextMessage,所以這個(gè)參數(shù)是string類型,

sentPI : 發(fā)送時(shí)要觸發(fā)的intent,

deliverPI : 對(duì)方接收到短信所觸發(fā)的intent

要判斷是否發(fā)送成功和接收成功,就需要注冊(cè)兩個(gè)廣播的監(jiān)聽.來得到結(jié)果.下面分別記錄一下免費(fèi)版Autojs和AutojsPro8.0以上的版本如何注冊(cè)一個(gè)監(jiān)聽.

免費(fèi)版注冊(cè)監(jiān)聽的方式

/**
 * 免費(fèi)版autojs注冊(cè)監(jiān)聽
 */
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("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
                console.log("發(fā)送的內(nèi)容: " + message);
                break;
            default:
                console.log("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
                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("手機(jī)號(hào): " + phone + " 接收短信成功");
    }
});
context.registerReceiver(receiver, receiverFilter);

以下是Pro8.0以后的版本注冊(cè)監(jiān)聽的方式:

/**
 * autojsPro 8.0以上的版本使用的監(jiān)聽
 */
 //發(fā)送短信的監(jiān)聽
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("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
            console.log("發(fā)送的內(nèi)容: " + message);
            break;
        default:
            console.log("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
            break;
    }
});
context.registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));


//對(duì)方接收短信的監(jiān)聽
let receiver = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    console.log("手機(jī)號(hào): " + phone + " 接收短信成功");
});
context.registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));

監(jiān)聽的注冊(cè), 自己根據(jù)當(dāng)前手機(jī)所使用的的Autojs版本自己選擇,或者自己做成一個(gè)函數(shù)判斷后再注冊(cè).

快要下班了, 我還是直接通過整個(gè)腳本來講解其他的吧!

importPackage(android.content);


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


//監(jiān)聽腳本的結(jié)束事件,結(jié)束后,注銷兩個(gè)監(jiān)聽,否則會(huì)一直再后臺(tái)監(jiān)聽著...
events.on("exit", () => {
    context.unregisterReceiver(receiver);
    context.unregisterReceiver(sendMessage);
});


/**發(fā)送與接收的廣播**/
const SENT_SMS_ACTION = "SENT_SMS_ACTION";
const DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";


//這里先注冊(cè)兩個(gè)監(jiān)聽,一個(gè)是發(fā)短信成功后的監(jiān)聽, 一個(gè)是對(duì)方接收短信成功
//的監(jiān)聽,短信發(fā)送失敗后的邏輯可以寫在這里.
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("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
            console.log("發(fā)送的內(nèi)容: " + message);
            break;
        default:
            console.log("給手機(jī)號(hào)碼: " + phone + " 發(fā)送短信成功");
            break;
    }
});
context.registerReceiver(sendMessage, new IntentFilter(SENT_SMS_ACTION));


let receiver = new BroadcastReceiver(function(ctx, intent) {
    let phone = intent.getStringExtra("KEY_PHONENUM");
    console.log("手機(jī)號(hào): " + phone + " 接收短信成功");
});
context.registerReceiver(receiver, new IntentFilter(DELIVERED_SMS_ACTION));


var phoneArray = ["電話號(hào)碼", "電話號(hào)碼"];
for (let i in phoneArray) {
    sendMessages(phoneArray[i], "今天也是元?dú)鉂M滿的一天呢!!!", i);
    sleep(100);
}
//保持腳本持續(xù)運(yùn)行,不會(huì)提前注銷監(jiān)聽事件. 代碼執(zhí)行完自己手動(dòng)結(jié)束腳本.
//這里我沒優(yōu)化的更人性化一些...
while (true) {
    // sendMessages("10010", "也是元?dú)鉂M滿的一天呢!!!");
    sleep(60 * 1000);
}


/**
 * 發(fā)短信的函數(shù)
 * @param {string} phoneNumber  手機(jī)號(hào)碼
 * @param {string} message      要發(fā)送的文字短信
 * @param {int} rescode         短信廣播的標(biāo)識(shí),只要是個(gè)int類型的數(shù)字即可,每條短信使用不同的標(biāo)識(shí)號(hào),確保監(jiān)聽可以正確識(shí)別
 */
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是廣播標(biāo)識(shí),用來區(qū)分不同手機(jī)號(hào)的短信,
    //PendingIntent.FLAG_ONE_SHOT 這個(gè)是說,該廣播只使用一次.再有相同的rescode標(biāo)識(shí)的廣播被接收到時(shí),不做處理.
    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);

    /**
     * 這里是判斷短信內(nèi)容如果大于70個(gè)字, 就需要分兩條或者多條短信發(fā)送出去.
     */
    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);
    }
}

好了下班前, 把這個(gè)折騰好幾晚上的問題.搞定. 希望可以幫助更多的人. 折騰不易. 希望得到幫助的小哥哥們,打賞一下. 謝謝啦...

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 版本
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    9433
  • 監(jiān)聽
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    8300
  • 注冊(cè)
    +關(guān)注

    關(guān)注

    2

    文章

    7

    瀏覽量

    11234
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    想做個(gè)觸發(fā)警報(bào)會(huì)自動(dòng)發(fā)短信的 業(yè)余技術(shù)求指導(dǎo)

    如題想做個(gè)12V觸發(fā)警報(bào)會(huì)自動(dòng)發(fā)短信的 業(yè)余技術(shù)求指導(dǎo)觸發(fā)警報(bào)那塊已經(jīng)搞好了不過因?yàn)榧夹g(shù)問題 自動(dòng)發(fā)送指定短信息到手機(jī)那塊不會(huì)求指導(dǎo)??!
    發(fā)表于 04-29 15:41

    51單片機(jī)控制SIM900A發(fā)短信問題

    怎么通過矩陣鍵盤輸入電話號(hào)碼實(shí)現(xiàn)發(fā)短信功能,現(xiàn)在只能實(shí)現(xiàn)給固定的號(hào)碼發(fā)短信,求大神們指點(diǎn)!
    發(fā)表于 08-30 20:34

    GSM短信模塊,如何用GSM短信模塊,單片機(jī),給手機(jī)發(fā)短信

    如題,想用GSM短信模塊,如何用GSM短信模塊,單片機(jī),給手機(jī)發(fā)短信。誰有原理圖、操作步驟和程序
    發(fā)表于 03-12 20:12

    用STM32操控GSM模塊發(fā)短信有什么推薦的模塊嗎

    想學(xué)下用STM32操控GSM模塊發(fā)短信,不知道大家有什么不錯(cuò)的模塊好推薦?
    發(fā)表于 01-21 23:01

    請(qǐng)問有STM32控制GSM發(fā)短信的代碼嗎?

    買開發(fā)板回來后,最近幾天都在研究STM32控制GSM發(fā)短信。。。想求個(gè)程序STM32 PA1管腳收到低電平,就控制GSM卡,發(fā)送短信“老婆你好”,到152*******我老婆手機(jī)上。。。原子哥,關(guān)于GSM只有短視頻教程,小弟還是有點(diǎn)看不懂。。。想做個(gè)小東西惹老婆開心,誰給
    發(fā)表于 03-18 22:15

    stm32 gsm TC35發(fā)短信

    最近在調(diào)gsm,在網(wǎng)上找了好長(zhǎng)時(shí)間的資料也沒找到,stm32 gsm發(fā)短信的程序,所以自己寫了個(gè),為了大家可以更好的學(xué)習(xí)gsm。在min stm32上已經(jīng)成功,注意當(dāng)stm32與gsm連接后,最好按下復(fù)位鍵。STM32發(fā)短信成功 .zip (652.1 KB )
    發(fā)表于 03-21 06:35

    請(qǐng)問有GSM模塊簡(jiǎn)化的只有收發(fā)短信的程序嗎?

    工程里面多余的文件全都不要,只要能保證收發(fā)短信就可以,謝謝大神們。。
    發(fā)表于 04-19 06:36

    wince+gprs收發(fā)短信源碼

    wince+gprs收發(fā)短信源碼 部分代碼如下:// GPRS.h: interface for the CGPRS class.//////////////////////////////////////////////////////////////////////// #if !defined(AFX_G
    發(fā)表于 03-20 14:11 ?148次下載

    輕松上手 無線上網(wǎng)使用之雙劍合并發(fā)短信

    輕松上手 無線上網(wǎng)使用之雙劍合并發(fā)短信 由于手機(jī)本身的體積限制而沒有專用鍵盤,目前來說,許多短信一族都只好去練就一身“一
    發(fā)表于 01-26 11:04 ?673次閱讀

    基于Android平臺(tái)的自發(fā)短信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    基于Android手機(jī)操作系統(tǒng)開發(fā)了一款自發(fā)短信系統(tǒng)。利用SQLite數(shù)據(jù)庫存儲(chǔ)技術(shù)、Service啟動(dòng)服務(wù)技術(shù)及Runnable接口,設(shè)計(jì)并實(shí)現(xiàn)了好友管理、短信管理、后臺(tái)檢測(cè)發(fā)送短信
    發(fā)表于 09-25 14:54 ?25次下載

    使用51單片機(jī)控制收發(fā)短信的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)控制收發(fā)短信的程序免費(fèi)下載。
    發(fā)表于 05-30 17:55 ?12次下載
    使用51單片機(jī)控制收<b class='flag-5'>發(fā)短信</b>的程序免費(fèi)下載

    使用單片機(jī)實(shí)現(xiàn)收發(fā)短信的設(shè)計(jì)資料說明

    借助系統(tǒng)模型,闡明GSM模塊收發(fā)短信的基本概念以及串口控制SMS的基本原理。詳細(xì)介紹單片機(jī)控制GSM模塊工作的軟件實(shí)現(xiàn)過程,對(duì)怎樣用單片機(jī)控制GSM模塊收發(fā)短信進(jìn)行探討,也對(duì)程序設(shè)計(jì)的主體思想作了較為細(xì)致的分析。
    的頭像 發(fā)表于 07-18 11:08 ?4606次閱讀

    使用Arduino實(shí)現(xiàn)GSM模塊SIM900A發(fā)短信的實(shí)驗(yàn)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用Arduino實(shí)現(xiàn)GSM模塊SIM900A發(fā)短信的實(shí)驗(yàn)免費(fèi)下載。
    發(fā)表于 03-12 15:24 ?53次下載

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

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

    Autojs多卡手機(jī)后臺(tái)靜默發(fā)送短信

    第三方應(yīng)用發(fā)送短信,需要授予短信權(quán)限.沒有權(quán)限的話. 沒法運(yùn)行本文中的代碼. 申請(qǐng)短信權(quán)限,包括怎么在AndroidManifast.xml文件中聲明權(quán)限,百度一下就有答案. 這里不贅述了, pro版的
    的頭像 發(fā)表于 03-03 10:26 ?1965次閱讀