使用flutter_sms_inbox读取Android短信遇权限拒绝错误求助
解决Flutter读取Android短信权限拒绝问题
1. 添加静态权限声明
在android/app/src/main/AndroidManifest.xml的<manifest>标签内添加读取短信的权限:
<uses-permission android:name="android.permission.READ_SMS" />
2. 引入权限处理依赖
在pubspec.yaml中添加permission_handler库(用于动态申请权限):
dependencies: flutter: sdk: flutter flutter_sms_inbox: ^1.0.3 permission_handler: ^10.2.0 # 可替换为最新稳定版
执行flutter pub get安装依赖。
3. 修改代码,先申请权限再读取短信
修改你的刷新按钮逻辑,先检查并申请READ_SMS权限,通过后再调用短信读取方法:
import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_sms_inbox/flutter_sms_inbox.dart'; // 刷新短信的方法 Future<void> refreshSms() async { // 检查权限状态 final status = await Permission.sms.status; if (!status.isGranted) { // 申请权限 final result = await Permission.sms.request(); if (result.isDenied) { // 权限被拒绝,可添加Toast或弹窗提示用户开启权限 return; } } // 权限已授予,读取短信 final SmsQuery query = SmsQuery(); final messages = await query.getAllSms; // 处理获取到的短信数据,更新UI }
额外说明
- Android 6.0(API 23)及以上系统要求危险权限必须动态申请,仅静态声明无法生效,这是你遇到权限拒绝的核心原因。
- 若出现
grantUriPermission()相关提示,确保通过flutter_sms_inbox提供的标准方法读取短信,避免直接操作Content URI,无需额外配置该权限。
内容的提问来源于stack exchange,提问作者Aman Ojha
相关产品推荐
相关产品推荐

