唉, 安卓代碼轉成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
發布評論請先 登錄
相關推薦
評論