Flutter SIM卡检测插件sim_detector的使用
Flutter SIM卡检测插件sim_detector的使用
使用 sim_detector
插件可以在 Flutter 应用中监听 SIM 卡订阅信息的变化。以下是如何在 Flutter 应用中集成和使用该插件的详细步骤。
示例代码
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'dart:async';
import 'dart:io';
import 'package:sim_detector/sim_detector.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _messengerKey = GlobalKey<ScaffoldMessengerState>();
StreamSubscription<dynamic>? SimSubscriptionIdStreamSubscription;
String lastSubscriptionId = '';
[@override](/user/override)
void initState() {
super.initState();
_requestPermission();
}
[@override](/user/override)
void dispose() {
SimSubscriptionIdStreamSubscription?.cancel();
super.dispose();
}
Future<void> _requestPermission() async {
await [
Permission.phone
].request();
}
void _addSimSubscriptionChangeListener() async {
if (Platform.isAndroid) {
addSimSubscriptionChangeHandler().then((_) {
listenForSimSubscriptionIdChange();
});
}
}
void _removeSimSubscriptionChangeListener() {
if (Platform.isAndroid) {
SimSubscriptionIdStreamSubscription?.cancel();
removeSimSubscriptionChangeHandler();
}
}
void _showSnackBar(String msg, BuildContext context) {
final snackBar = SnackBar(content: Text(msg),);
_messengerKey.currentState?.showSnackBar(snackBar);
}
void listenForSimSubscriptionIdChange() {
SimSubscriptionIdStreamSubscription = simSubscriptionChangeStream?.listen((params) {
List<int> subscribedSimSubscriptionIds = _getSubscribedSimSubscriptionIds(params as SubscribedSimInformation);
print('Current sim subscription IDs: $subscribedSimSubscriptionIds');
setState(() {
lastSubscriptionId = subscribedSimSubscriptionIds.toString();
});
});
}
List<int> _getSubscribedSimSubscriptionIds(SubscribedSimInformation subscriptionInformation) {
List<int> subscribedSimSubscriptionIdList = [];
if (subscriptionInformation.simSlotZeroSubscriptionId != null) {
subscribedSimSubscriptionIdList.add(subscriptionInformation.simSlotZeroSubscriptionId!);
}
if (subscriptionInformation.simSlotOneSubscriptionId != null) {
subscribedSimSubscriptionIdList.add(subscriptionInformation.simSlotOneSubscriptionId!);
}
return subscribedSimSubscriptionIdList;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
scaffoldMessengerKey: _messengerKey,
home: Scaffold(
appBar: AppBar(
title: const Text('SIM检测器'),
),
body: Center(
child: Column(
children: [
SizedBox(height: 20,),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
backgroundColor: Colors.blue,
),
onPressed: () {
_addSimSubscriptionChangeListener();
_showSnackBar('添加了SimSubscriptionChangeListener', context);
},
child: const Text('添加SIM订阅处理程序', style: TextStyle(color: Colors.white),),
),
SizedBox(height: 20,),
TextButton(
style: TextButton.styleFrom(
padding: const EdgeInsets.all(16.0),
backgroundColor: Colors.blue,
),
onPressed: () {
_removeSimSubscriptionChangeListener();
_showSnackBar('移除了SimSubscriptionChangeListener', context);
},
child: const Text('移除SIM订阅处理程序', style: TextStyle(color: Colors.white),),
),
SizedBox(height: 20,),
Text("最后的subscriptionId = $lastSubscriptionId")
],
),
),
),
);
}
}
步骤说明
-
导入必要的库:
import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; import 'dart:async'; import 'dart:io'; import 'package:sim_detector/sim_detector.dart';
-
初始化应用:
void main() { runApp(MyApp()); }
-
定义应用状态类:
class MyApp extends StatefulWidget { [@override](/user/override) _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { final _messengerKey = GlobalKey<ScaffoldMessengerState>(); StreamSubscription<dynamic>? SimSubscriptionIdStreamSubscription; String lastSubscriptionId = '';
-
请求权限:
[@override](/user/override) void initState() { super.initState(); _requestPermission(); } Future<void> _requestPermission() async { await [ Permission.phone ].request(); }
-
添加和移除 SIM 订阅变化监听器:
void _addSimSubscriptionChangeListener() async { if (Platform.isAndroid) { addSimSubscriptionChangeHandler().then((_) { listenForSimSubscriptionIdChange(); }); } } void _removeSimSubscriptionChangeListener() { if (Platform.isAndroid) { SimSubscriptionIdStreamSubscription?.cancel(); removeSimSubscriptionChangeHandler(); } }
-
显示消息提示框:
void _showSnackBar(String msg, BuildContext context) { final snackBar = SnackBar(content: Text(msg),); _messengerKey.currentState?.showSnackBar(snackBar); }
-
监听 SIM 订阅 ID 变化:
void listenForSimSubscriptionIdChange() { SimSubscriptionIdStreamSubscription = simSubscriptionChangeStream?.listen((params) { List<int> subscribedSimSubscriptionIds = _getSubscribedSimSubscriptionIds(params as SubscribedSimInformation); print('Current sim subscription IDs: $subscribedSimSubscriptionIds'); setState(() { lastSubscriptionId = subscribedSimSubscriptionIds.toString(); }); }); }
-
获取已订阅的 SIM 卡订阅 ID:
List<int> _getSubscribedSimSubscriptionIds(SubscribedSimInformation subscriptionInformation) { List<int> subscribedSimSubscriptionIdList = []; if (subscriptionInformation.simSlotZeroSubscriptionId != null) { subscribedSimSubscriptionIdList.add(subscriptionInformation.simSlotZeroSubscriptionId!); } if (subscriptionInformation.simSlotOneSubscriptionId != null) { subscribedSimSubscriptionIdList.add(subscriptionInformation.simSlotOneSubscriptionId!); } return subscribedSimSubscriptionIdList; }
-
构建应用界面:
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( scaffoldMessengerKey: _messengerKey, home: Scaffold( appBar: AppBar( title: const Text('SIM检测器'), ), body: Center( child: Column( children: [ SizedBox(height: 20,), TextButton( style: TextButton.styleFrom( padding: const EdgeInsets.all(16.0), backgroundColor: Colors.blue, ), onPressed: () { _addSimSubscriptionChangeListener(); _showSnackBar('添加了SimSubscriptionChangeListener', context); }, child: const Text('添加SIM订阅处理程序', style: TextStyle(color: Colors.white),), ), SizedBox(height: 20,), TextButton( style: TextButton.styleFrom( padding: const EdgeInsets.all(16.0), backgroundColor: Colors.blue, ), onPressed: () { _removeSimSubscriptionChangeListener(); _showSnackBar('移除了SimSubscriptionChangeListener', context); }, child: const Text('移除SIM订阅处理程序', style: TextStyle(color: Colors.white),), ), SizedBox(height: 20,), Text("最后的subscriptionId = $lastSubscriptionId") ], ), ), ), ); }
更多关于Flutter SIM卡检测插件sim_detector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SIM卡检测插件sim_detector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sim_detector
是一个用于检测设备中 SIM 卡信息的 Flutter 插件。通过这个插件,开发者可以获取设备中 SIM 卡的数量、状态、运营商信息等。以下是使用 sim_detector
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 sim_detector
插件的依赖:
dependencies:
flutter:
sdk: flutter
sim_detector: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 sim_detector
插件:
import 'package:sim_detector/sim_detector.dart';
3. 获取 SIM 卡信息
你可以使用 SimDetector
类来获取 SIM 卡的相关信息。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:sim_detector/sim_detector.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SimCardInfoScreen(),
);
}
}
class SimCardInfoScreen extends StatefulWidget {
@override
_SimCardInfoScreenState createState() => _SimCardInfoScreenState();
}
class _SimCardInfoScreenState extends State<SimCardInfoScreen> {
List<SimCard> simCards = [];
@override
void initState() {
super.initState();
_getSimCardInfo();
}
Future<void> _getSimCardInfo() async {
try {
List<SimCard> cards = await SimDetector.getSimCards();
setState(() {
simCards = cards;
});
} catch (e) {
print("Error getting SIM card info: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SIM Card Info'),
),
body: ListView.builder(
itemCount: simCards.length,
itemBuilder: (context, index) {
SimCard card = simCards[index];
return ListTile(
title: Text('SIM ${index + 1}'),
subtitle: Text('Carrier: ${card.carrierName}\nCountry: ${card.countryCode}'),
);
},
),
);
}
}
4. 处理权限
在某些 Android 设备上,获取 SIM 卡信息可能需要 READ_PHONE_STATE
权限。确保在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>