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

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

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

Flutter Device IMEI

Build version

Flutter plugin to get real and consistent IMEI for Mobile Device

Getting Started

flutter_device_imei 插件用于获取移动设备的真实且一致的IMEI(国际移动设备身份码)。对于Android设备,如果版本低于10,则直接获取IMEI;对于大于等于10的版本,则返回 Settings.Secure.ANDROID_ID。而在iOS上,它会为应用提供一个唯一标识设备的UUID字符串。

使用方法

首先,在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_device_imei: ^0.0.3

然后在您的Dart代码中导入并使用这个插件:

import 'package:flutter_device_imei/flutter_device_imei.dart';

String imei = await FlutterDeviceImei.instance.getIMEI();

示例代码

下面是一个完整的示例应用程序,展示了如何在Flutter项目中使用 flutter_device_imei 插件来获取设备的IMEI信息。

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

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

  // 初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = await FlutterDeviceImei.instance.getIMEI() ??
          'Failed to get IMEI.';
    } on PlatformException {
      platformVersion = 'Failed to get IMEI.';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

此示例创建了一个简单的Flutter应用程序,当应用程序启动时,它会尝试获取设备的IMEI,并将结果显示在屏幕上。如果获取失败,它会显示相应的错误信息。

Support

如果您喜欢这个插件或者它对您有帮助,您可以考虑支持作者:

Author

此插件由 Pranil Shah 开发。


希望这些信息能帮助您了解和使用 flutter_device_imei 插件。如果有任何问题或需要进一步的帮助,请随时提问!


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_device_imei插件来获取设备IMEI信息的代码案例。需要注意的是,从Android 10(API级别29)开始,Google Play商店中的应用无法再访问设备的非重置唯一标识符(如IMEI),因此这个功能在大部分现代设备上会受到限制。此外,在发布应用到Google Play商店时,获取IMEI信息可能违反隐私政策。

前提条件

  1. pubspec.yaml文件中添加flutter_device_imei依赖:
dependencies:
  flutter:
    sdk: flutter
  flutter_device_imei: ^x.y.z  # 请替换为最新版本号
  1. 运行flutter pub get来安装依赖。

Android配置

由于IMEI信息的获取涉及到敏感权限,你需要在AndroidManifest.xml文件中添加必要的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

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

    <!-- 其他配置 -->

</manifest>

Flutter代码实现

  1. main.dart文件中,导入flutter_device_imei包并请求权限,然后获取IMEI信息:
import 'package:flutter/material.dart';
import 'package:flutter_device_imei/flutter_device_imei.dart';
import 'package:permission_handler/permission_handler.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Device IMEI Info'),
        ),
        body: Center(
          child: ImeiInfoScreen(),
        ),
      ),
    );
  }
}

class ImeiInfoScreen extends StatefulWidget {
  @override
  _ImeiInfoScreenState createState() => _ImeiInfoScreenState();
}

class _ImeiInfoScreenState extends State<ImeiInfoScreen> {
  String? imei;
  String? imeiSv;
  bool isPermissionGranted = false;

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

  Future<void> _requestPermissions() async {
    Map<Permission, PermissionStatus> statuses = await Permission.phoneState.status;
    if (!statuses[Permission.phoneState]!.isGranted) {
      Map<Permission, PermissionStatus> result = await Permission.phoneState.request();
      if (result[Permission.phoneState]!.isGranted) {
        setState(() {
          isPermissionGranted = true;
          _getDeviceImei();
        });
      }
    } else {
      setState(() {
        isPermissionGranted = true;
        _getDeviceImei();
      });
    }
  }

  Future<void> _getDeviceImei() async {
    if (isPermissionGranted) {
      try {
        String? deviceImei = await FlutterDeviceImeiPlugin.imei;
        String? deviceImeiSv = await FlutterDeviceImeiPlugin.imeiSV;

        setState(() {
          imei = deviceImei;
          imeiSv = deviceImeiSv;
        });
      } catch (e) {
        print("Error getting IMEI: $e");
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        if (!isPermissionGranted)
          Text('Requesting permission...'),
        if (isPermissionGranted && imei != null && imeiSv != null)
          Column(
            children: [
              Text('IMEI: $imei'),
              Text('IMEI SV: $imeiSv'),
            ],
          ),
        if (isPermissionGranted && (imei == null || imeiSv == null))
          Text('IMEI information not available.'),
      ],
    );
  }
}

注意事项

  1. 权限处理:使用permission_handler插件来处理权限请求。
  2. 隐私政策:确保你的应用符合隐私政策,特别是在获取和处理敏感信息时。
  3. 设备兼容性:考虑到现代Android设备对IMEI信息的限制,这个功能可能在某些设备上不可用。

这个代码示例展示了如何请求权限并尝试获取设备的IMEI信息。然而,由于隐私和安全限制,这个功能在现代Android设备上可能不起作用。

回到顶部