Flutter短信监听插件flutter_sms_listener的使用
Flutter短信监听插件flutter_sms_listener的使用
简介
flutter_sms_listener
是一个用于在Android设备上监听接收到的短信的Flutter插件。该插件是从另一个完整的插件 sms
中提取出来的 SmsReceiver
类,主要目的是为了提供一个支持null-safety的版本,因为原插件已经不再维护。
此插件使用了Android的Telephony API,并会提示用户授予访问短信的权限。它并不是依赖于第三方API(如Google SMS Retriever API)的插件,后者可以绕过权限请求。如果你希望使用这样的API,请考虑其他插件。
开始使用
-
添加依赖 在你的
pubspec.yaml
文件中添加flutter_sms_listener
依赖:dependencies: flutter_sms_listener: ^0.1.3
-
导入包 在你的Dart文件中导入
flutter_sms_listener
包:import 'package:flutter_sms_listener/flutter_sms_listener.dart';
使用示例
下面是一个完整的示例代码,展示了如何使用 flutter_sms_listener
插件来监听并显示接收到的短信。
import 'dart:io';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:intl/intl.dart';
import 'package:flutter_sms_listener/flutter_sms_listener.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static const String LISTEN_MSG = '正在监听短信...';
static const String NEW_MSG = '捕获到新消息!';
String _status = LISTEN_MSG;
FlutterSmsListener _smsListener = FlutterSmsListener();
List<SmsMessage> _messagesCaptured = <SmsMessage>[];
final _dateFormat = DateFormat('E, ').add_jm();
[@override](/user/override)
void initState() {
super.initState();
if (!Platform.isAndroid) {
return;
}
WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
_beginListening();
});
}
void _beginListening() {
_smsListener.onSmsReceived!.listen((message) {
_messagesCaptured.add(message);
setState(() {
_status = NEW_MSG;
});
Future.delayed(Duration(seconds: 5)).then((_) {
setState(() {
_status = LISTEN_MSG;
});
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('短信监听器'),
),
body: Center(
child: Column(
children: <Widget>[
SizedBox(
height: 12,
),
Text(_status),
_messagesCaptured.isEmpty
? Center(
child: Text('未找到任何消息'),
)
: ListView.separated(
itemCount: _messagesCaptured.length,
itemBuilder: (context, index) => ListTile(
contentPadding: EdgeInsets.all(4),
title: Text(
_messagesCaptured[index].address ?? '',
style: TextStyle(fontSize: 14, color: Colors.black),
),
subtitle: Text(
_messagesCaptured[index].body ?? '',
style: TextStyle(fontSize: 12, color: Colors.black87),
overflow: TextOverflow.ellipsis,
),
trailing: Text(_dateFormat.format(
_messagesCaptured[index].date ?? DateTime.now())),
),
shrinkWrap: true,
separatorBuilder: (context, _) => SizedBox(
height: 8,
),
),
],
),
),
),
);
}
}
更多关于Flutter短信监听插件flutter_sms_listener的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter短信监听插件flutter_sms_listener的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_sms_listener
插件来监听短信的示例代码。请注意,这个插件可能需要在Android和iOS平台上进行一些额外的配置。
首先,确保你的Flutter项目已经创建并初始化。然后,按照以下步骤操作:
1. 添加依赖
在你的pubspec.yaml
文件中添加flutter_sms_listener
依赖:
dependencies:
flutter:
sdk: flutter
flutter_sms_listener: ^x.y.z # 替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android权限
在android/app/src/main/AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
3. 配置Android广播接收器
在android/app/src/main/kotlin/你的包名/MainActivity.kt
(如果你是Kotlin项目)或android/app/src/main/java/你的包名/MainActivity.java
(如果你是Java项目)中,确保你注册了短信接收广播接收器。不过,flutter_sms_listener
插件通常已经为你处理了这部分,但有时候你可能需要检查或确认。
4. iOS配置
对于iOS,你需要在Info.plist
中添加一些权限请求,但flutter_sms_listener
插件在iOS上监听短信的功能可能受限,因为iOS对隐私保护非常严格。你可能需要寻找其他方法或使用Apple提供的API(通常仅限企业应用)。
5. 使用插件
在你的Flutter代码中,你可以这样使用flutter_sms_listener
插件:
import 'package:flutter/material.dart';
import 'package:flutter_sms_listener/flutter_sms_listener.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final SmsListener _smsListener = SmsListener();
@override
void initState() {
super.initState();
// 开始监听短信
_smsListener.startSmsListener().then((value) {
if (value) {
print("SMS Listener started successfully");
// 监听短信接收事件
_smsListener.smsReceivedStream.listen((SmsMessage sms) {
print("New SMS received: ${sms.body} from ${sms.address}");
});
} else {
print("Failed to start SMS Listener");
}
});
}
@override
void dispose() {
// 停止监听短信
_smsListener.stopSmsListener().then((value) {
print("SMS Listener stopped: $value");
});
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SMS Listener Demo'),
),
body: Center(
child: Text('Check the console for incoming SMS messages.'),
),
),
);
}
}
注意事项
- 权限请求:在实际应用中,你需要在运行时请求用户授予读取短信的权限,可以使用
permission_handler
插件来处理权限请求。 - 隐私政策:确保你的应用有明确的隐私政策,告知用户应用将如何使用他们的短信数据。
- 平台限制:特别是在iOS上,监听短信的功能可能受到严格限制,需要仔细检查和测试。
这个示例代码展示了如何在Flutter中使用flutter_sms_listener
插件来监听短信。不过,请务必在实际部署前详细阅读插件的文档,并根据需要进行适当的配置和测试。