唉, 安卓代码转成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条评论
快来发表一下你的评论吧 !