Flutter短信监听插件flutter_sms_listener的使用

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

Flutter短信监听插件flutter_sms_listener的使用

简介

flutter_sms_listener 是一个用于在Android设备上监听接收到的短信的Flutter插件。该插件是从另一个完整的插件 sms 中提取出来的 SmsReceiver 类,主要目的是为了提供一个支持null-safety的版本,因为原插件已经不再维护。

此插件使用了Android的Telephony API,并会提示用户授予访问短信的权限。它并不是依赖于第三方API(如Google SMS Retriever API)的插件,后者可以绕过权限请求。如果你希望使用这样的API,请考虑其他插件。

开始使用

  1. 添加依赖 在你的 pubspec.yaml 文件中添加 flutter_sms_listener 依赖:

    dependencies:
      flutter_sms_listener: ^0.1.3
    
  2. 导入包 在你的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

1 回复

更多关于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.'),
        ),
      ),
    );
  }
}

注意事项

  1. 权限请求:在实际应用中,你需要在运行时请求用户授予读取短信的权限,可以使用permission_handler插件来处理权限请求。
  2. 隐私政策:确保你的应用有明确的隐私政策,告知用户应用将如何使用他们的短信数据。
  3. 平台限制:特别是在iOS上,监听短信的功能可能受到严格限制,需要仔细检查和测试。

这个示例代码展示了如何在Flutter中使用flutter_sms_listener插件来监听短信。不过,请务必在实际部署前详细阅读插件的文档,并根据需要进行适当的配置和测试。

回到顶部