跳转到内容

Bot.js 实现通话状态广播接收器

更新: 2025/7/20 字数: 0 字 时长: 0 分钟

简介

在 Android 平台上,可以通过广播机制接收系统状态变更事件。通过注册接收器,您可以在例如通话状态变化等系统事件发生时执行相应的操作。

本教程将引导您使用 Bot.js Pro 编写一个接收通话状态变更的脚本示例。

前提条件

  1. 具备基本的 JavaScript 编程知识;
  2. 开启必要的通话相关权限(如有权限请求弹窗,请点击“始终允许”)。

步骤 1:导入所需类

我们需要引入 TelephonyManagerIntentIntentFilter 等类。

js
importClass(android.telephony.TelephonyManager);
importClass(android.content.Intent);
importClass(android.content.IntentFilter);

步骤 2:创建 IntentFilter 并添加动作

用于声明我们希望接收的广播类型:

js
let filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE"); // 接收通话状态变更

步骤 3:实现广播接收器对象

通过 JavaAdapter 创建广播接收器,并在其中根据事件内容执行逻辑:

js
var myBroadcastReceiver = new JavaAdapter(android.content.BroadcastReceiver, {
    onReceive: function(context, intent) {
        let action = intent.getAction();
        if ('android.intent.action.PHONE_STATE' === action) {
            let state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
            switch (state) {
                case 'IDLE':
                    console.log('当前为空闲状态');
                    break;
                case 'RINGING':
                    console.log('来电');
                    break;
                case 'OFFHOOK':
                    console.log('通话进行中');
                    break;
            }
        }
    }
});

步骤 4:注册广播接收器

注册接收器以响应事件:

js
context.registerReceiver(myBroadcastReceiver, filter);

步骤 5:保持脚本运行

为确保接收器持续有效,保持脚本运行:

js

setInterval(() => {
    // 脚本保活占位
}, 1000);

步骤 6:退出时释放资源

避免内存占用,应在退出脚本时注销广播接收器:

js

$events.on('exit', () => {
    context.unregisterReceiver(myBroadcastReceiver);
});

完整代码

js
/**
 * 注册通话状态广播接收器
 */
function registerPhoneStateReceiver() {
    importClass(android.telephony.TelephonyManager);
    importClass(android.content.Intent);
    importClass(android.content.IntentFilter);

    let filter = new IntentFilter();
    filter.addAction("android.intent.action.PHONE_STATE");

    let myBroadcastReceiver = new JavaAdapter(android.content.BroadcastReceiver, {
        onReceive: function(context, intent) {
            let action = intent.getAction();
            if ('android.intent.action.PHONE_STATE' === action) {
                let state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
                switch(state) {
                    case 'IDLE':
                        console.log('当前为空闲状态');
                        break;
                    case 'RINGING':
                        console.log('检测到来电');
                        break;
                    case 'OFFHOOK':
                        console.log('通话进行中');
                        break;
                }
            }
        }
    });

    context.registerReceiver(myBroadcastReceiver, filter);

    $events.on('exit', () => {
        context.unregisterReceiver(myBroadcastReceiver);
    });
}

registerPhoneStateReceiver();

setInterval(() => {
    // 脚本保活,占位使用
}, 1000);

结语 通过本教程,您已掌握如何通过 Bot.js 注册广播接收器,处理电话相关状态事件。您可以将其拓展用于构建更实用的自动化场景。