Flutter获取设备信息插件imei_imsi_nullsafe的使用

Flutter获取设备信息插件imei_imsi_nullsafe的使用

imei_imsi_plugin

通过验证权限获取Android设备的真实IMEI和IMSI。

开始使用

这个项目是一个用于Flutter的插件包起点,它包含适用于Android和/或iOS的平台特定实现代码。

对于如何开始使用Flutter,您可以查看我们的在线文档,其中包含教程、示例、移动开发指南和完整的API引用。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用imei_imsi_nullsafe插件来获取设备的IMEI和IMSI。

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

import 'package:flutter/services.dart';
import 'package:imei_imsi_nullsafe/imei_imsi_nullsafe.dart'; // 使用imei_imsi_nullsafe插件

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformImei = '未知';
  String uniqueId = "未知";
  String _platformImsi = "未知";

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

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> initPlatformState() async {
    String platformImei;
    String platformImsi;

    String idunique;
    // 平台消息可能失败,所以我们使用try/catch来捕获PlatformException。
    try {
      platformImei = await ImeiImsiNullsafe.getImei(shouldShowRequestPermissionRationale: false);
      platformImsi = await ImeiImsiNullsafe.getImsi(shouldShowRequestPermissionRationale: false);
      List<String> multiImei = await ImeiImsiNullsafe.getImeiMulti();
      print(multiImei);
      idunique = await ImeiImsiNullsafe.getId();
    } on PlatformException {
      platformImei = '获取平台版本失败。';
    }

    // 如果在异步平台消息飞行时小部件从树中移除,我们希望丢弃回复而不是调用setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformImei = platformImei;
      _platformImsi = platformImsi;
      uniqueId = idunique;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text(
            '运行于\n imei : $_platformImei\n  唯一ID : $uniqueId \n  imsi  : $_platformImsi',
          ),
        ),
      ),
    );
  }
}

说明

  1. 导入库

    import 'package:flutter/material.dart';
    import 'dart:async';
    import 'package:flutter/services.dart';
    import 'package:imei_imsi_nullsafe/imei_imsi_nullsafe.dart'; // 使用imei_imsi_nullsafe插件
    
  2. 初始化状态

    [@override](/user/override)
    void initState() {
      super.initState();
      initPlatformState();
    }
    
  3. 获取设备信息

    Future<void> initPlatformState() async {
      String platformImei;
      String platformImsi;
      String idunique;
    
      try {
        platformImei = await ImeiImsiNullsafe.getImei(shouldShowRequestPermissionRationale: false);
        platformImsi = await ImeiImsiNullsafe.getImsi(shouldShowRequestPermissionRationale: false);
        List<String> multiImei = await ImeiImsiNullsafe.getImeiMulti();
        print(multiImei);
        idunique = await ImeiImsiNullsafe.getId();
      } on PlatformException {
        platformImei = '获取平台版本失败。';
      }
    
      if (!mounted) return;
    
      setState(() {
        _platformImei = platformImei;
        _platformImsi = platformImsi;
        uniqueId = idunique;
      });
    }
    
  4. 构建UI

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: Center(
            child: Text(
              '运行于\n imei : $_platformImei\n  唯一ID : $uniqueId \n  imsi  : $_platformImsi',
            ),
          ),
        ),
      );
    }
    

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

1 回复

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


在Flutter中,如果你想获取设备的IMEI和IMSI信息,可以使用 imei_imsi_nullsafe 插件。这个插件是一个空安全版本的插件,适用于支持空安全的Flutter项目。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  imei_imsi_nullsafe: ^1.0.0

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

2. 配置Android权限

为了获取设备的IMEI和IMSI信息,你需要在 AndroidManifest.xml 文件中添加以下权限:

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

如果你使用的是 Android 10 或更高版本,还需要添加以下权限:

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

请注意,READ_PRIVILEGED_PHONE_STATE 是一个系统级别的权限,通常只有系统应用才能获取该权限。因此,普通应用可能无法获取IMEI信息。

3. 请求权限

在Android 6.0及以上版本中,你需要在运行时请求 READ_PHONE_STATE 权限。你可以使用 permission_handler 插件来请求权限:

dependencies:
  permission_handler: ^10.0.0

然后在代码中请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.phone.status;
  if (!status.isGranted) {
    await Permission.phone.request();
  }
}

4. 使用插件获取IMEI和IMSI

现在你可以使用 imei_imsi_nullsafe 插件来获取设备的IMEI和IMSI信息:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String? imei;
  String? imsi;

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

  Future<void> getDeviceInfo() async {
    await requestPermissions(); // 请求权限

    try {
      imei = await ImeiImsiNullsafe.getImei();
      imsi = await ImeiImsiNullsafe.getImsi();
    } catch (e) {
      print("Error: $e");
    }

    if (mounted) {
      setState(() {});
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Device Info"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("IMEI: ${imei ?? "Unknown"}"),
            Text("IMSI: ${imsi ?? "Unknown"}"),
          ],
        ),
      ),
    );
  }
}
回到顶部