Bot.js 实现通话状态广播接收器 
更新: 2025/7/20 字数: 0 字 时长: 0 分钟
简介 
在 Android 平台上,可以通过广播机制接收系统状态变更事件。通过注册接收器,您可以在例如通话状态变化等系统事件发生时执行相应的操作。
本教程将引导您使用 Bot.js Pro 编写一个接收通话状态变更的脚本示例。
前提条件 
- 具备基本的 JavaScript 编程知识;
 - 开启必要的通话相关权限(如有权限请求弹窗,请点击“始终允许”)。
 
步骤 1:导入所需类 
我们需要引入 TelephonyManager、Intent 和 IntentFilter 等类。
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 注册广播接收器,处理电话相关状态事件。您可以将其拓展用于构建更实用的自动化场景。
