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团队和社区持续开发开源软件,请点击以下链接:

Buy Me A Coffee

贡献到Cybroid开源项目

Cybroid欢迎对GitHub上的开源项目做出贡献。当进行贡献时,请遵循Code of Conduct

问题提交

如果您有任何问题或功能请求,可以在这里提交:提交问题

贡献指南

请参考每个项目的样式和贡献指南以提交补丁和增加内容。一般来说,我们遵循“fork-and-pull”Git工作流。

  1. Fork GitHub上的仓库
  2. Clone 项目到本地机器
  3. Commit 更改到自己的分支
  4. Push 更改到自己的fork
  5. 提交一个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

1 回复

更多关于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或不可用。

此外,请确保在实际应用中处理异常和错误情况,以提供良好的用户体验。

回到顶部