Flutter直接拨打电话插件direct_call的使用

如何安装

Flutter

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  direct_call: 1.0.0

然后运行 flutter pub get 来获取依赖。

Android: 在 AndroidManifest.xml 中添加权限

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

如何使用

以下是一个完整的示例代码,展示如何使用 direct_call 插件进行拨打电话,并监听通话状态。

示例代码

import 'package:direct_call/direct_call.dart'; // 导入direct_call插件
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp()); // 启动应用
}

class MyApp extends StatefulWidget {
  const MyApp({super.key}); // 构造函数

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState(); // 创建状态类
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();

    // 监听通话状态
    DirectCall.stream.listen((event) {
      switch (event.status) {
        case PhoneStateStatus.CALL_STATE_IDLE: // 通话空闲状态
          debugPrint("手机状态:通话结束:${event.callRecord}"); // 打印通话记录

        case PhoneStateStatus.CALL_STATE_RINGING: // 来电状态
          debugPrint("手机状态:来电话状态");

        case PhoneStateStatus.CALL_STATE_OFFHOOK: // 正在接听或拨号状态
          debugPrint("手机状态:正在接听电话/拨号");

        default:
          debugPrint("手机状态,非通话相关");
      }
    });
  }

  [@override](/user/override)
  void deactivate() {
    super.deactivate();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'), // 设置标题
        ),
        body: Center(
          child: ElevatedButton( // 按钮用于拨打电话
            onPressed: () async {
              final result = await DirectCall.makePhoneCall('10010', 0); // 拨打10010号码
              debugPrint("result:$result"); // 打印拨打电话的结果
            },
            child: const Text('打电话'), // 按钮文字
          ),
        ),
      ),
    );
  }
}

更多关于Flutter直接拨打电话插件direct_call的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter直接拨打电话插件direct_call的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,如果你想直接拨打电话,可以使用 url_launcher 插件。虽然 direct_call 插件也可以实现类似的功能,但 url_launcher 更为常用且维护良好。以下是使用 url_launcher 插件直接拨打电话的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 url_launcher 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.1.5

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 url_launcher 包:

import 'package:url_launcher/url_launcher.dart';

3. 拨打电话

使用 launchUrl 方法来拨打电话。你需要将电话号码格式化为 tel: 协议的 URL。

void _makePhoneCall(String phoneNumber) async {
  final Uri launchUri = Uri(
    scheme: 'tel',
    path: phoneNumber,
  );
  if (await canLaunch(launchUri.toString())) {
    await launch(launchUri.toString());
  } else {
    throw 'Could not launch $launchUri';
  }
}

4. 调用方法

你可以在按钮的 onPressed 事件中调用 _makePhoneCall 方法:

ElevatedButton(
  onPressed: () {
    _makePhoneCall('1234567890');
  },
  child: Text('Call 1234567890'),
);

5. 权限配置

在 Android 上,你需要在 AndroidManifest.xml 文件中添加拨打电话的权限:

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

在 iOS 上,你需要在 Info.plist 文件中添加以下内容:

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

6. 处理权限

在 Android 6.0(API 23)及以上版本,你需要在运行时请求拨打电话的权限。你可以使用 permission_handler 插件来处理权限请求。

dependencies:
  permission_handler: ^10.0.0

然后在代码中请求权限:

import 'package:permission_handler/permission_handler.dart';

void _requestCallPermission() async {
  if (await Permission.phone.request().isGranted) {
    _makePhoneCall('1234567890');
  } else {
    // 处理权限被拒绝的情况
  }
}
回到顶部