Flutter电话功能扩展插件another_telephony的使用
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
更多关于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.xml
和Info.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...'),
),
),
);
}
}
注意事项
- 权限处理:在实际应用中,你需要请求并处理用户权限。可以使用
permission_handler
等插件来请求和处理权限。 - 插件限制:由于操作系统和硬件的限制,某些功能可能无法在所有设备上正常工作。
- 隐私政策:在使用此类功能时,确保你的应用有明确的隐私政策,并告知用户将如何处理他们的数据。
这个示例展示了如何初始化another_telephony
插件并监听来电和去电事件。你可以根据实际需求进一步扩展功能,比如处理短信事件或实现自动接听/挂断电话(在支持的平台上)。