如何在Flutter中获取移动设备SIM卡的ICCID?
在Flutter中获取SIM卡ICCID的方法
你可以通过以下几个Flutter包来获取SIM卡的ICCID编号,以下是具体实现步骤:
可用的包
目前有两个常用包支持获取ICCID:
- sim_info:轻量包,专注于SIM卡基础信息获取
- telephony:功能更全面,除了ICCID还能获取其他蜂窝网络相关信息
实现步骤
1. 添加依赖
在pubspec.yaml中添加对应包的依赖:
用sim_info的话:
dependencies: sim_info: ^0.2.0 permission_handler: ^10.2.0 # 用于动态申请权限
用telephony的话:
dependencies: telephony: ^0.2.0 permission_handler: ^10.2.0
2. 配置权限
不同平台需要配置对应的权限:
Android端
在android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 部分国产设备可能额外需要READ_SMS权限 --> <uses-permission android:name="android.permission.READ_SMS" />
Android 10及以上版本需要动态申请权限,代码中需先请求权限再获取ICCID。
iOS端
在ios/Runner/Info.plist中添加权限描述:
<key>NSCellularNetworkUsageDescription</key> <string>需要访问蜂窝网络信息以获取SIM卡ICCID</string>
3. 代码示例
使用sim_info获取ICCID
import 'package:sim_info/sim_info.dart'; import 'package:permission_handler/permission_handler.dart'; Future<String?> fetchICCID() async { // 申请电话权限 final permissionStatus = await Permission.phone.request(); if (permissionStatus.isGranted) { try { final iccid = await SimInfo.getIccid; return iccid; } catch (e) { print('获取ICCID失败: $e'); return null; } } else { print('权限被拒绝,无法获取ICCID'); return null; } }
使用telephony获取ICCID
import 'package:telephony/telephony.dart'; import 'package:permission_handler/permission_handler.dart'; final Telephony _telephony = Telephony.instance; Future<String?> fetchICCID() async { final permissionStatus = await Permission.phone.request(); if (permissionStatus.isGranted) { final simData = await _telephony.getSimData(); return simData?.iccid; } else { print('权限被拒绝,无法获取ICCID'); return null; } }
注意事项
- 双卡设备可能需要额外处理,部分包会返回主卡ICCID,需测试适配
- 若设备无SIM卡或SIM卡未激活,会返回null或抛出异常,需做好异常捕获
- iOS系统对隐私权限限制严格,需确保权限描述清晰,否则用户可能拒绝授权
内容的提问来源于stack exchange,提问作者Bhavesh Vaghasiya
相关产品推荐
相关产品推荐

