Flutter获取手机信息插件phoneinformations的使用

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

Flutter获取手机信息插件phoneinformations的使用

描述

Phone Informations Flutter Plugin 是一个简单的插件,用于访问与用户手机相关的信息,例如设备型号、Android版本、序列号、SIM卡信息等。

安装

pubspec.yaml 文件中添加 phoneinformations 作为依赖项:

dependencies:
  phoneinformations: ^1.0.4

使用

要使用此插件,首先需要在 Dart 代码中导入它:

import 'package:phoneinformations/phoneinformations.dart';

然后,可以通过以下方法获取手机信息:

PhoneInfo phoneInfos = await Phoneinformations.getPhoneInformation();

该方法返回一个 PhoneInfo 对象,包含以下属性:

  • model: 手机型号名称。
  • andoidVersion: 手机上运行的 Android 版本。
  • serial: 设备序列号。
  • id: 设备 ID。
  • androidId: 手机的 Android ID。
  • manufacturer: 手机制造商。
  • brand: 手机品牌。
  • sdkInt: Android 系统的 SDK 版本。
  • simSerialNumber: SIM 卡序列号。
  • simNumber: SIM 卡的电话号码。
  • subscriberID: SIM 卡的订阅者 ID。
  • networkCountryISO: 当前网络的 ISO 国家代码。
  • simCountryISO: SIM 卡网络的 ISO 国家代码。
  • softwareVersion: 手机的软件版本。
  • voiceMailNumber: 语音信箱号码。
  • networkType: 当前使用的网络类型。
  • networkGeneration: 当前使用的网络代数。
  • cid: 当前网络的小区 ID。
  • lac: 当前网络的位置区码。
  • simOperator: SIM 卡的运营商。
  • mobileNetworkCode: 当前网络的移动网络代码。
  • mobileCountryCode: 当前网络的移动国家代码。

注意: 根据手机和网络的不同,某些属性可能是空或为 null

示例

以下是一个完整的示例代码,展示了如何使用 phoneinformations 插件来获取并显示手机信息:

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:phoneinformations/phoneinformations.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  String model = "";
  String andoidVersion = "";
  String serial = "";
  String id = "";
  String androidId = "";
  String manufacturer = "";
  String brand = "";
  String sdkInt = "";
  String simSerialNumber = "";
  String simNumber = "";
  String subscriberID = "";
  String networkCountryISO = "";
  String simCountryISO = "";
  String softwareVersion = "";
  String voiceMailNumber = "";
  String networkType = "";
  String networkGeneration = "";
  String cid = "";
  String lac = "";
  String simOperator = "";
  String mobileNetworkCode = "";
  String mobileCountryCode = "";

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们在异步方法中初始化
  Future<void> initPlatformState() async {
    PhoneInfo phoneInfos;

    try {
      phoneInfos = await Phoneinformations.getPhoneInformation();
      model = phoneInfos.model;
      andoidVersion = phoneInfos.andoidVersion;
      serial = phoneInfos.serial;
      id = phoneInfos.id;
      androidId = phoneInfos.androidId;
      manufacturer = phoneInfos.manufacturer;
      sdkInt = phoneInfos.sdkInt.toString(); // 将 int 转换为字符串
      simSerialNumber = phoneInfos.simSerialNumber;
      simNumber = phoneInfos.simNumber;
      subscriberID = phoneInfos.subscriberID;
      networkCountryISO = phoneInfos.networkCountryISO;
      simCountryISO = phoneInfos.simCountryISO;
      mobileNetworkCode = phoneInfos.mobileNetworkCode;
      mobileCountryCode = phoneInfos.mobileCountryCode;
      softwareVersion = phoneInfos.softwareVersion;
      voiceMailNumber = phoneInfos.voiceMailNumber;
      networkType = phoneInfos.networkType;
      networkGeneration = phoneInfos.networkGeneration;
      cid = phoneInfos.cid;
      lac = phoneInfos.lac;
      simOperator = phoneInfos.simOperator;
    } catch (e) {
      print("Failed to get phone infos, error : $e");
    }

    // 如果小部件在异步平台消息处理期间从树中移除,我们希望丢弃回复而不是调用 setState 更新不存在的界面
    if (!mounted) return;

    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Phone Infos'),
        ),
        body: SingleChildScrollView( // 使用 SingleChildScrollView 防止内容溢出
          child: Column(
            children: [
              Center(
                child: Text('Version: $andoidVersion'),
              ),
              Center(
                child: Text('Model: $model'),
              ),
              Center(
                child: Text('SDK Int: $sdkInt'),
              ),
              Center(
                child: Text('Device ID: $id'),
              ),
              Center(
                child: Text('Android ID: $androidId'),
              ),
              Center(
                child: Text('IMEI: $simSerialNumber'),
              ),
              Center(
                child: Text('Phone Number: $simNumber'),
              ),
              Center(
                child: Text('Device ID: $subscriberID'),
              ),
              Center(
                child: Text('Network Country ISO: $networkCountryISO'),
              ),
              Center(
                child: Text('SIM Operator: $simOperator'),
              ),
              Center(
                child: Text('Mobile Network Code: $mobileNetworkCode'),
              ),
              Center(
                child: Text('Mobile Country Code: $mobileCountryCode'),
              ),
              Center(
                child: Text('SIM Country ISO: $simCountryISO'),
              ),
              Center(
                child: Text('Software Version: $softwareVersion'),
              ),
              Center(
                child: Text('Voice Mail Number: $voiceMailNumber'),
              ),
              Center(
                child: Text('Network Type: $networkType'),
              ),
              Center(
                child: Text('Network Generation: $networkGeneration'),
              ),
              Center(
                child: Text('Cell ID: $cid'),
              ),
              Center(
                child: Text('Location Area Code: $lac'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用phone_information插件来获取手机信息的代码示例。这个插件允许你访问设备的详细信息,比如IMEI、序列号、设备型号等。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  phone_information: ^0.2.9  # 请注意版本号可能会有更新,请检查最新版本

然后运行flutter pub get来安装这个依赖。

接下来,在你的Flutter项目的Dart文件中(例如main.dart),你可以按照以下方式使用phone_information插件:

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

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

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

class _MyAppState extends State<MyApp> {
  String imei = "";
  String imsi = "";
  String device = "";
  String androidId = "";
  String simSerialNumber = "";
  String manufacturer = "";
  String model = "";
  String board = "";
  String hardware = "";
  String product = "";
  String fingerprint = "";
  String serial = "";

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

  Future<void> _getPhoneInformation() async {
    final PhoneInformation phoneInfo = PhoneInformation();

    imei = await phoneInfo.getIMEI();
    imsi = await phoneInfo.getIMSI();
    device = await phoneInfo.getDevice();
    androidId = await phoneInfo.getAndroidId();
    simSerialNumber = await phoneInfo.getSimSerialNumber();
    manufacturer = await phoneInfo.getManufacturer();
    model = await phoneInfo.getModel();
    board = await phoneInfo.getBoard();
    hardware = await phoneInfo.getHardware();
    product = await phoneInfo.getProduct();
    fingerprint = await phoneInfo.getFingerprint();
    serial = await phoneInfo.getSerial();

    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Phone Information'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('IMEI: $imei'),
              Text('IMSI: $imsi'),
              Text('Device: $device'),
              Text('Android ID: $androidId'),
              Text('SIM Serial Number: $simSerialNumber'),
              Text('Manufacturer: $manufacturer'),
              Text('Model: $model'),
              Text('Board: $board'),
              Text('Hardware: $hardware'),
              Text('Product: $product'),
              Text('Fingerprint: $fingerprint'),
              Text('Serial: $serial'),
            ],
          ),
        ),
      ),
    );
  }
}

在上面的代码中,我们创建了一个Flutter应用,并在初始化时调用了_getPhoneInformation函数来获取设备的各种信息。这些信息随后被显示在一个简单的UI中。

注意

  1. 获取IMEI、IMSI等敏感信息需要相应的权限,因此你需要在AndroidManifest.xml中声明这些权限。
  2. 某些信息(如IMEI)在Android 10(API级别29)及更高版本中可能无法直接获取,因为Google出于隐私保护的考虑对这些信息的访问进行了限制。
  3. 确保你的应用具有适当的权限处理逻辑,以处理用户拒绝授予权限的情况。

希望这个示例能帮助你更好地理解如何在Flutter项目中使用phone_information插件。

回到顶部