uniapp 模拟来电
实现思路
在UniApp中模拟来电功能,需结合前端界面模拟和原生插件能力。以下是两种常见方案:
方案一:纯前端模拟(无原生功能)
通过自定义组件和动画模拟来电界面,适合简单演示场景。
页面结构

<template>
<view class="call-modal" v-if="showCall">
<view class="caller-info">
<text>{{ callerName }}</text>
<text>{{ callerNumber }}</text>
</view>
<view class="call-buttons">
<button @click="answerCall">接听</button>
<button @click="rejectCall">挂断</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
showCall: false,
callerName: '模拟来电',
callerNumber: '1381234'
};
},
methods: {
triggerCall() {
this.showCall = true;
},
answerCall() {
console.log('接听电话');
this.showCall = false;
},
rejectCall() {
this.showCall = false;
}
}
};
</script>
<style>
.call-modal {
position: fixed;
width: 100%;
height: 100%;
background: #000;
color: #fff;
}
</style>
触发方式
通过定时器或按钮事件调用triggerCall()显示模拟界面。
方案二:原生插件集成(需Android/iOS支持)
若需实现真实来电效果(如覆盖系统界面),需开发或使用现有原生插件。

Android端步骤
- 创建原生模块处理来电通知(需
BroadcastReceiver监听来电)。 - 通过UniApp的
uni.requireNativePlugin调用插件。
示例插件调用
const callPlugin = uni.requireNativePlugin('SimulateCallPlugin');
callPlugin.simulateCall({
number: '13800138000',
name: '测试来电'
});
插件开发要点
- Android: 使用
WindowManager创建悬浮窗。 - iOS: 需私有API(上架限制),或通过本地通知模拟。
注意事项
- 权限问题:原生方案需申请
SYSTEM_ALERT_WINDOW(Android)权限。 - 上架限制:iOS严格限制模拟系统功能,可能无法通过App Store审核。
- 替代方案:考虑使用本地通知(
uni.push)模拟来电提醒,但无法覆盖全屏。
扩展建议
- 测试场景可使用HBuilderX模拟器调试界面。
- 复杂需求建议对接第三方通话SDK(如腾讯云呼叫中心)。






