Flutter电话功能扩展插件another_telephony的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter电话功能扩展插件another_telephony的使用

插件简介

another_telephony 是一个用于Flutter应用程序中处理电话功能的插件,它提供了诸如发送短信、查询短信、监听收到的短信等功能。该插件是基于原Telephony包进行fork后维护更新的一个版本,旨在保持与最新版Flutter的兼容性。需要注意的是,此插件目前仅支持Android平台

功能特性

  • ✅ 发送短信(Send SMS)
  • ✅ 查询短信(Query SMS)
    • ✅ 收件箱(Inbox)
    • ✅ 已发送(Sent)
    • ✅ 草稿箱(Draft)
  • ✅ 查询对话(Query Conversations)
  • ✅ 监听收到的短信(Listen to incoming SMS)
    • ✅ 应用在前台时
    • ✅ 应用在后台时
  • ✅ 网络数据和指标(Network data and metrics)
    • ✅ 包含但不限于:蜂窝网络状态、通话状态、网络运营商名称等信息
  • ✅ 开始拨打电话(Start Phone Call)
  • ❌ 计划发送短信(Schedule a SMS) 未实现
  • ❌ 使用SMS Retriever API 未实现

使用方法

准备工作

首先,在项目的pubspec.yaml文件中添加another_telephony作为依赖项:

dependencies:
  another_telephony: ^latest_version # 替换为最新的版本号

然后在需要使用的地方导入:

import 'package:another_telephony/telephony.dart';

获取单例实例:

final Telephony telephony = Telephony.instance;

权限申请

确保手动请求必要的权限(如发送短信、读取短信等),并在AndroidManifest.xml中声明这些权限。例如,对于发送短信需要如下权限:

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

通过以下方式请求权限:

bool permissionsGranted = await telephony.requestPhoneAndSmsPermissions;

示例代码

下面是一个完整的示例应用,展示了如何使用another_telephony来监听新到达的消息,并展示最后一条接收到的短信内容:

import 'package:another_telephony/telephony.dart';
import 'package:flutter/material.dart';

@pragma('vm:entry-point')
void onBackgroundMessage(SmsMessage message) {
  debugPrint("onBackgroundMessage called");
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _message = "";
  final Telephony telephony = Telephony.instance;

  void onMessage(SmsMessage message) async {
    setState(() {
      _message = message.body ?? "Error reading message body.";
    });
  }

  void onSendStatus(SendStatus status) {
    setState(() {
      _message = status == SendStatus.SENT ? "sent" : "delivered";
    });
  }

  Future<void> initPlatformState() async {
    final bool? result = await telephony.requestPhoneAndSmsPermissions;

    if (result != null && result) {
      telephony.listenIncomingSms(
          onNewMessage: onMessage, onBackgroundMessage: onBackgroundMessage);
    }
  }

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Center(child: Text("Latest received SMS: $_message")),
          TextButton(
              onPressed: () async {
                await telephony.openDialer("123413453");
              },
              child: Text('Open Dialer'))
        ],
      ),
    ));
  }
}

以上就是关于another_telephony插件的基本介绍及使用说明,更多详细信息可以参考官方文档。希望这篇指南能帮助您快速上手并充分利用这个强大的工具!


更多关于Flutter电话功能扩展插件another_telephony的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter电话功能扩展插件another_telephony的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用another_telephony插件来实现电话功能扩展的代码示例。another_telephony插件允许你进行更多高级的电话操作,比如监听来电、去电和短信等。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  another_telephony: ^最新版本号  # 请替换为实际的最新版本号

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

2. 配置权限

由于电话功能涉及到用户的隐私,你需要在AndroidManifest.xmlInfo.plist中添加相应的权限。

Android

android/app/src/main/AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>

注意:ANSWER_PHONE_CALLS权限在Android 10及以上版本中已被废弃,且大多数设备不再支持此权限。

iOS

ios/Runner/Info.plist中添加以下权限(如果需要监听来电或去电):

<key>NSMicrophoneUsageDescription</key>
<string>应用需要访问麦克风来监听电话</string>
<key>NSPhoneBookUsageDescription</key>
<string>应用需要访问电话簿</string>

注意:iOS对电话功能的限制较多,尤其是接听电话的操作,通常不允许应用自动接听电话。

3. 使用another_telephony插件

在你的Dart代码中导入并使用another_telephony插件。以下是一个简单的示例,展示如何监听来电和去电事件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  AnotherTelephony? _telephony;

  @override
  void initState() {
    super.initState();
    // 初始化插件
    _telephony = AnotherTelephony();

    // 监听来电事件
    _telephony?.addListenerForIncomingCall!((call) {
      print("Incoming Call: ${call.phoneNumber}");
      // 在这里处理来电事件,比如显示一个来电界面
    });

    // 监听去电事件
    _telephony?.addListenerForOutgoingCall!((call) {
      print("Outgoing Call: ${call.phoneNumber}");
      // 在这里处理去电事件
    });
  }

  @override
  void dispose() {
    // 移除监听器
    _telephony?.removeListenerForIncomingCall!();
    _telephony?.removeListenerForOutgoingCall!();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Telephony Demo'),
        ),
        body: Center(
          child: Text('Listening for incoming and outgoing calls...'),
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在实际应用中,你需要请求并处理用户权限。可以使用permission_handler等插件来请求和处理权限。
  2. 插件限制:由于操作系统和硬件的限制,某些功能可能无法在所有设备上正常工作。
  3. 隐私政策:在使用此类功能时,确保你的应用有明确的隐私政策,并告知用户将如何处理他们的数据。

这个示例展示了如何初始化another_telephony插件并监听来电和去电事件。你可以根据实际需求进一步扩展功能,比如处理短信事件或实现自动接听/挂断电话(在支持的平台上)。

回到顶部