Flutter获取电话信息插件flutter_telephony_info的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter获取电话信息插件flutter_telephony_info的使用

插件简介

flutter_telephony_info 是一个轻量级的平台插件,通过 Pigeon 代码生成器与 Android 设备交互,以从 Android 平台的 Telephony 模块中获取信息。该插件适用于 Android 12 及以上版本。

获取的信息

  • 运营商名称
  • 移动网络代码 (MNC)
  • 移动网络代(如 LTE, HSDPA 等)
  • 移动网络类型(如 5G, 4G … 2G)
  • 小区 ID (cid)
  • 信号强度

最低 SDK 版本

应用的最低 SDK 版本必须为 30。请确保在 android/app/build.gradle 文件中设置 minSdkVersion 为 30:

defaultConfig {
    ...
    minSdkVersion 30
    ...
}

必要权限

插件需要以下 Android 权限才能正常工作:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

注意事项

  • 注意! 该插件仅适用于 Android 12 及以上版本。
  • 别忘了开启 GPS,因为某些信息(如信号强度)依赖于位置服务。

使用示例

以下是一个完整的示例代码,展示了如何使用 flutter_telephony_info 插件来获取电话信息。

示例代码

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:flutter_telephony_info/flutter_telephony_info.dart';
import 'package:permission_handler/permission_handler.dart';

void main() async {
  // 确保 Flutter 引擎已初始化
  WidgetsFlutterBinding.ensureInitialized();

  // 请求必要的权限
  await [Permission.phone, Permission.locationWhenInUse].request();

  // 启动应用
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<TelephonyInfo?>? _telephonyInfo;
  final _flutterTelephonyInfoPlugin = TelephonyAPI();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化平台状态
    initPlatformState();
  }

  // 异步方法用于初始化平台状态
  Future<void> initPlatformState() async {
    List<TelephonyInfo?>? telephonyInfo;

    try {
      // 获取电话信息
      telephonyInfo = await _flutterTelephonyInfoPlugin.getInfo();
    } on PlatformException {
      // 处理平台异常
      telephonyInfo = null;
    }

    // 如果 widget 已经从树中移除,则不更新状态
    if (!mounted) return;

    // 更新状态
    setState(() {
      _telephonyInfo = telephonyInfo;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('SIM 运营商: ${_telephonyInfo?.first?.displayName ?? '未知'}'),
              Text('移动网络代码 (MNC): ${_telephonyInfo?.first?.mnc ?? '未知'}'),
              Text('移动网络代: ${_telephonyInfo?.first?.networkGeneration ?? '未知'}'),
              Text('移动网络类型: ${_telephonyInfo?.first?.radioType ?? '未知'}'),
              Text('小区 ID (cid): ${_telephonyInfo?.first?.cid ?? '未知'}'),
              Text('信号强度: ${_telephonyInfo?.first?.signalStrength ?? '未知'}'),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter获取电话信息插件flutter_telephony_info的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter获取电话信息插件flutter_telephony_info的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 flutter_telephony_info 插件来获取电话信息的示例代码。这个插件允许你访问设备的电话相关信息,比如 IMEI、IMSI、设备号(电话号码)、SIM 卡状态等。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_telephony_info 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_telephony_info: ^3.0.0  # 请检查最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中,你可以按照以下步骤使用 flutter_telephony_info 插件:

import 'package:flutter/material.dart';
import 'package:flutter_telephony_info/flutter_telephony_info.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _imei = '';
  String _imsi = '';
  String _lineNumber = '';
  String _simState = '';
  String _carrierName = '';
  String _isoCountryCode = '';
  String _mcc = '';
  String _mnc = '';

  @override
  void initState() {
    super.initState();
    _getTelephonyInfo();
  }

  Future<void> _getTelephonyInfo() async {
    FlutterTelephonyInfo telephonyInfo = FlutterTelephonyInfo();

    try {
      if (await telephonyInfo.simState.isEnabled) {
        _imei = await telephonyInfo.imei;
        _imsi = await telephonyInfo.imsi;
        _lineNumber = await telephonyInfo.lineNumber;
        _simState = await telephonyInfo.simState.toString();
        _carrierName = await telephonyInfo.carrierName;
        _isoCountryCode = await telephonyInfo.isoCountryCode;
        var networkInfo = await telephonyInfo.networkInfo;
        _mcc = networkInfo?.mcc ?? '';
        _mnc = networkInfo?.mnc ?? '';
      } else {
        setState(() {
          _simState = 'SIM card is not present or is locked.';
        });
      }
    } catch (e) {
      print('Error fetching telephony info: $e');
    } finally {
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Telephony Info'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('IMEI: $_imei'),
              SizedBox(height: 16),
              Text('IMSI: $_imsi'),
              SizedBox(height: 16),
              Text('Line Number (Phone Number): $_lineNumber'),
              SizedBox(height: 16),
              Text('SIM State: $_simState'),
              SizedBox(height: 16),
              Text('Carrier Name: $_carrierName'),
              SizedBox(height: 16),
              Text('ISO Country Code: $_isoCountryCode'),
              SizedBox(height: 16),
              Text('MCC (Mobile Country Code): $_mcc'),
              SizedBox(height: 16),
              Text('MNC (Mobile Network Code): $_mnc'),
            ],
          ),
        ),
      ),
    );
  }
}

说明:

  1. 依赖添加:首先在 pubspec.yaml 文件中添加 flutter_telephony_info 依赖。
  2. 插件初始化:在 initState 方法中调用 _getTelephonyInfo 方法来获取电话信息。
  3. 异步获取数据:使用 await 关键字异步获取电话信息,包括 IMEI、IMSI、设备号(电话号码)、SIM 卡状态、运营商名称、ISO 国家代码、MCC 和 MNC。
  4. UI 显示:在 build 方法中构建一个简单的 UI 来显示获取到的电话信息。

注意事项:

  • 获取电话信息通常需要相应的权限,尤其是在 Android 上。确保在 AndroidManifest.xml 中添加必要的权限,并处理运行时权限请求(如果需要)。
  • 在 iOS 上,获取某些敏感信息(如 IMEI)可能受到限制,需要遵循 Apple 的隐私政策和指导原则。

这个示例提供了一个基础框架,你可以根据实际需求进一步扩展和定制。

回到顶部