Flutter SIM卡管理插件simcards的使用
Flutter SIM卡管理插件simcards的使用
SimCards Flutter 插件
本插件允许你查询设备上的活跃SIM卡。
请注意,该插件仅支持Android系统,因为它使用了Android提供的Telephony SubscriptionManager包。
Android | |
---|---|
支持 | SDK 23+ |
配置
要使用此插件,你需要在AndroidManifest.xml
文件中添加READ_PHONE_STATE
权限。由于Android SDK 30开始,READ_PHONE_STATE
权限已更改为READ_PHONE_NUMBERS
。通常只需为main
版本添加权限即可。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 注意:从Android SDK 30开始,`READ_PHONE_STATE`权限更改为`READ_PHONE_NUMBERS` -->
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<application>
...
如何使用
首先,你需要请求之前添加的READ_PHONE_STATE
权限。
final _simcards = Simcards();
await _simcards.requestPermission();
接下来,检查是否已经授予READ_PHONE_STATE
权限。
bool _permissionGranted = await _simcards.hasPermission();
现在你可以获取设备上所有活跃的SIM卡。
List<SimCard> _simCardList = await _simcards.getSimCards();
整个过程非常简单。
支持Cybroid开源项目
如果您希望支持Cybroid团队和社区持续开发开源软件,请点击以下链接:
贡献到Cybroid开源项目
Cybroid欢迎对GitHub上的开源项目做出贡献。当进行贡献时,请遵循Code of Conduct。
问题提交
如果您有任何问题或功能请求,可以在这里提交:提交问题
贡献指南
请参考每个项目的样式和贡献指南以提交补丁和增加内容。一般来说,我们遵循“fork-and-pull”Git工作流。
- Fork GitHub上的仓库
- Clone 项目到本地机器
- Commit 更改到自己的分支
- Push 更改到自己的fork
- 提交一个Pull request以便我们可以审查您的更改
注意:在发起pull request之前,请确保从“upstream”合并最新的更改!
版权和许可
MIT 许可证
版权所有 (c) 2023 Cybroid Technologies (U) Ltd
特此免费授予任何获得本软件副本及关联文档文件(以下简称“软件”)的人不受限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本,并准许被提供软件的人这样做,但须遵守以下条件:
上述版权声明和本许可声明应包含在所有副本或实质性部分中。
本软件按“原样”提供,不附带任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权的保证。在任何情况下,无论是在合同诉讼、侵权行为或其他方面,作者或版权持有人都不对因使用或无法使用软件而引起的任何索赔、损害或其他责任负责。
完整示例Demo
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:simcards/sim_card.dart';
import 'package:simcards/simcards.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _simcardsPlugin = Simcards();
List<SimCard> _simCardList = [];
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,所以我们初始化时使用异步方法。
Future<void> initPlatformState() async {
String platformVersion;
// 平台消息可能会失败,所以我们使用try/catch来捕获PlatformException。
// 我们还处理消息可能返回null的情况。
try {
platformVersion = await _simcardsPlugin.getPlatformVersion() ?? 'Unknown platform version';
bool permissionGranted = await _simcardsPlugin.hasPermission();
if (!permissionGranted) {
await _simcardsPlugin.requestPermission();
// 如果权限已授予,现在可以获取SIM卡列表
_simCardList = await _simcardsPlugin.getSimCards();
} else {
_simCardList = await _simcardsPlugin.getSimCards();
}
debugPrint(_simCardList.toString());
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// 如果小部件在异步平台消息还在飞行时被从树中移除,则我们应该丢弃回复而不是调用setState来更新我们的不存在的外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Text('运行于: $_platformVersion\n'),
),
),
);
}
}
更多关于Flutter SIM卡管理插件simcards的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter SIM卡管理插件simcards的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用simcards
插件来管理SIM卡信息的示例代码。请注意,由于Flutter插件可能会随着时间和版本更新而有所变化,因此以下代码基于插件的最新版本和API。
首先,确保你已经在pubspec.yaml
文件中添加了simcards
插件的依赖:
dependencies:
flutter:
sdk: flutter
simcards: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用simcards
插件来获取SIM卡信息。以下是一个简单的示例,展示了如何获取设备上的SIM卡信息:
import 'package:flutter/material.dart';
import 'package:simcards/simcards.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<SimCardInfo> _simCards = [];
@override
void initState() {
super.initState();
_getSimCardInfo();
}
Future<void> _getSimCardInfo() async {
try {
List<SimCardInfo> simCards = await SimCards.getSimCardsInfo();
setState(() {
_simCards = simCards;
});
} catch (e) {
print('Error getting SIM card info: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SIM Card Info'),
),
body: _simCards.isEmpty
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: _simCards.length,
itemBuilder: (context, index) {
SimCardInfo simCard = _simCards[index];
return ListTile(
title: Text('SIM Card ${index + 1}'),
subtitle: Text(
'Number: ${simCard.number ?? 'N/A'}\n'
'Country Code: ${simCard.countryCode ?? 'N/A'}\n'
'Carrier: ${simCard.carrierName ?? 'N/A'}\n'
'Is Sim Present: ${simCard.isPresent ? 'Yes' : 'No'}\n'
'Is Sim Ready: ${simCard.isReady ? 'Yes' : 'No'}',
),
);
},
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,它使用simcards
插件来获取设备上的SIM卡信息,并在UI中显示这些信息。
SimCards.getSimCardsInfo()
是一个异步函数,它返回一个包含SimCardInfo
对象的列表,每个对象代表一个SIM卡的信息。SimCardInfo
类包含有关SIM卡的各种信息,如号码、国家代码、运营商名称等。- 我们使用
ListView.builder
来动态生成一个列表,每个列表项显示一个SIM卡的信息。
请注意,实际获取到的SIM卡信息可能因设备和操作系统版本而异,某些字段可能为null或不可用。
此外,请确保在实际应用中处理异常和错误情况,以提供良好的用户体验。