You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中实现收到新短信时自动弹出Toast提示的功能

Flutter 实现接收新短信自动弹出Toast的方案

注意:受iOS系统隐私限制,第三方应用无法读取短信内容,以下方案仅支持安卓平台

1. 权限配置

  • 首先在安卓项目的android/app/src/main/AndroidManifest.xml中添加权限声明,放在manifest标签下、application标签外:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<!-- 安卓13及以上版本额外需要的权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  • 动态申请权限,推荐使用permission_handler库处理权限逻辑,避免自己写原生适配代码:
import 'package:permission_handler/permission_handler.dart';

Future<bool> requestSmsPermission() async {
  final smsStatus = await Permission.sms.request();
  final notificationStatus = await Permission.postNotifications.request();
  return smsStatus.isGranted && notificationStatus.isGranted;
}

2. 核心功能实现

  • 先在pubspec.yaml添加依赖:
dependencies:
  flutter:
    sdk: flutter
  permission_handler: ^11.0.1
  sms_advanced: ^1.2.0
  fluttertoast: ^8.2.4
  • 短信监听+Toast弹出的完整代码:
import 'package:flutter/material.dart';
import 'package:sms_advanced/sms_advanced.dart';
import 'package:fluttertoast/fluttertoast.dart';

class SmsListenerPage extends StatefulWidget {
  const SmsListenerPage({super.key});

  @override
  State<SmsListenerPage> createState() => _SmsListenerPageState();
}

class _SmsListenerPageState extends State<SmsListenerPage> {
  late SmsReceiver _smsReceiver;

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

  Future<void> _initSmsListener() async {
    final hasPermission = await requestSmsPermission();
    if (!hasPermission) return;
    _smsReceiver = SmsReceiver();
    _smsReceiver.onSmsReceived?.listen((SmsMessage message) {
      Fluttertoast.showToast(
        msg: "新短信来自:${message.address}\n内容:${message.body}",
        toastLength: Toast.LENGTH_LONG,
        gravity: ToastGravity.CENTER,
        fontSize: 14,
      );
    });
  }

  @override
  void dispose() {
    _smsReceiver.stopListening();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(appBar: AppBar(title: const Text("短信监听")));
  }
}

3. 兼容注意事项

  • 安卓10及以上系统禁止应用在后台弹出界面,部分定制ROM(小米、华为等)需要手动给应用开启「后台弹出界面」「自启动」权限,否则应用退到后台后无法收到短信广播
  • 如果需要应用被杀死后仍能触发提醒,需要额外实现安卓原生保活逻辑,不同厂商ROM的保活配置差异较大

内容的提问来源于stack exchange,提问作者Zu Haib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:57:03