You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从电话拨号器完成通话后切回运行中的Flutter应用

Flutter跳转拨号器并在通话结束后返回应用

实现步骤

1. 添加依赖

使用url_launcher包唤起系统拨号器,这是Flutter生态中处理外部应用跳转的常用工具。在pubspec.yaml中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.2.5 # 建议使用最新稳定版本

执行flutter pub get完成依赖安装。

2. 核心代码实现

通过tel协议唤起拨号器,系统会在通话结束后自动切回你的Flutter应用(只要应用未被系统回收)。示例代码如下:

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

class DialerDemo extends StatelessWidget {
  // 替换为目标电话号码
  final String targetNumber = '13800138000';

  Future<void> _launchDialer() async {
    final dialUri = Uri(scheme: 'tel', path: targetNumber);
    try {
      // 唤起系统拨号器
      await launchUrl(dialUri);
      // 调用后应用进入后台,通话结束系统自动切回
    } catch (e) {
      // 处理拨号器无法唤起的异常
      debugPrint('启动拨号器失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('拨号测试')),
      body: Center(
        child: ElevatedButton(
          onPressed: _launchDialer,
          child: Text('拨打 $targetNumber'),
        ),
      ),
    );
  }
}

3. 平台专属配置

  • Android:
    仅唤起拨号器不需要额外权限;如果需要直接发起通话(跳过拨号器确认),需在AndroidManifest.xml中添加权限:

    <uses-permission android:name="android.permission.CALL_PHONE" />
    

    并配合permission_handler包动态申请权限。

  • iOS:
    在Info.plist中添加允许查询tel协议的配置,确保正常唤起拨号器:

    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>tel</string>
    </array>
    

关键注意事项

  • 通话结束后返回应用是系统默认行为,只要应用未因后台内存不足被系统杀死,都会自动切回。
  • 必须在真机上测试,模拟器通常不提供拨号功能。
  • 如果需要监听通话状态(比如确认通话何时结束),可额外集成telephony包,但普通场景下系统自动返回已满足需求。

内容的提问来源于stack exchange,提问作者Munib Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:40:41