如何使用Flutter访问消息通知、手机全部SMS并存储相关数据?
Flutter 需求解决方案
1. 访问手机所有消息通知
- Android 平台:使用
notification_listener_service库,它封装了系统的NotificationListenerService,能够监听并获取设备上所有APP的通知内容。使用前需要在AndroidManifest.xml中配置对应的服务声明,还得引导用户在系统设置里开启通知监听权限。 - iOS 平台:受系统隐私限制,无法获取其他APP的通知,仅能处理自身APP发送的通知,可使用
flutter_local_notifications库来管理自身通知。
2. 获取手机全部SMS
- 跨平台方案:使用
sms库,支持Android和iOS读取短信数据:- Android 端需申请
READ_SMS、READ_PHONE_STATE权限,Android 13及以上版本还要额外申请POST_NOTIFICATIONS权限(若需监听短信通知)。 - iOS 端需在
Info.plist中配置NSMessagesUsageDescription字段说明读取短信的用途,且仅能读取用户授权后的短信数据(iOS 10+ 支持)。
- Android 端需申请
- 实时监听新SMS:
- Android 可结合
broadcast_receiver库监听android.provider.Telephony.SMS_RECEIVED广播,在广播回调中直接获取新短信的内容和发送号码,无需遍历全部短信。 - iOS 可通过
sms库的监听回调获取新短信,或配合系统UserNotifications框架监听短信通知(需用户授权通知权限)。
- Android 可结合
3. 存储电话号码及SMS数据
- 本地存储推荐:
hive:轻量级NoSQL存储,无需编写SQL,适合快速存储批量短信、电话号码这类数据,读写性能优异。sqflite:SQLite的Flutter封装,适合需要复杂查询的场景(比如按号码、时间筛选短信)。
- 若需云端存储,可结合Firebase的
cloud_firestore,但仅本地存储的话优先选择前两者。
内容的提问来源于stack exchange,提问作者Md. Manzurul Islam
相关产品推荐
相关产品推荐

