Flutter如何获取安卓的IMEI

在Flutter开发中需要获取安卓设备的IMEI号,但发现官方插件限制较多。请问目前有哪些可靠的方法或第三方库可以实现这个功能?需要兼容Android 10及以上版本,同时考虑隐私权限问题。是否能提供具体代码示例和权限配置说明?

2 回复

在Flutter中获取安卓IMEI,推荐使用device_info_plus插件。获取代码示例:

var deviceInfo = DeviceInfoPlugin();
var androidInfo = await deviceInfo.androidInfo;
String imei = androidInfo.androidId;

注意:Android 10+限制非系统应用获取IMEI,通常使用Android ID替代。需添加<uses-permission android:name="android.permission.READ_PHONE_STATE"/>权限。

更多关于Flutter如何获取安卓的IMEI的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中获取Android设备的IMEI需要以下步骤:

1. 添加权限

android/app/src/main/AndroidManifest.xml 中添加权限:

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

2. 添加依赖

pubspec.yaml 中添加设备信息插件:

dependencies:
  device_info_plus: ^9.0.0

3. 实现代码

import 'package:device_info_plus/device_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';

class IMEIService {
  static Future<String?> getIMEI() async {
    // 检查权限
    var status = await Permission.phone.request();
    if (!status.isGranted) {
      return null;
    }

    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    
    if (Platform.isAndroid) {
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
      return androidInfo.androidId; // 注意:这不是真正的IMEI
    }
    
    return null;
  }
}

重要说明:

  • Android 10+限制:从Android 10开始,普通应用无法直接获取IMEI
  • androidId替代:可以使用androidInfo.androidId作为设备唯一标识符
  • 权限处理:需要动态申请READ_PHONE_STATE权限

使用示例:

String? imei = await IMEIService.getIMEI();
if (imei != null) {
  print('设备标识: $imei');
} else {
  print('无法获取设备标识');
}

建议使用androidId或其他设备标识符替代IMEI,以确保应用兼容性和用户隐私安全。

回到顶部