You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中能否获取与Java代码一致的Android设备唯一ANDROID_ID?

我懂你的问题——用Flutter的device_info插件拿到的ID和原生Java代码获取的ANDROID_ID对不上,对吧?这主要是因为旧的device_info插件已经被官方废弃,而且你可能没用到正确的API字段。下面我给你一步步解决这个问题:

解决Flutter获取与原生Java一致的ANDROID_ID问题

首先,旧的device_info插件已经停止维护,官方现在推荐使用device_info_plus插件——它是前者的升级替代版本,能更准确地映射原生设备信息,包括和你Java代码返回一致的ANDROID_ID。

步骤1:添加插件依赖

在你的pubspec.yaml文件中引入最新版本的device_info_plus:

dependencies:
  flutter:
    sdk: flutter
  device_info_plus: ^9.0.2 # 建议使用pub仓库上的最新版本

执行flutter pub get完成依赖安装。

步骤2:编写获取ANDROID_ID的代码

在Flutter中,device_info_plus返回的AndroidDeviceInfo.androidId字段,完全对应原生Java代码Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)的返回值。

这里是完整的异步获取示例:

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';

Future<String?> getMatchingAndroidId() async {
  // 仅在Android平台执行获取逻辑
  if (!kIsWeb && defaultTargetPlatform == TargetPlatform.android) {
    final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
    final AndroidDeviceInfo androidDeviceInfo = await deviceInfo.androidInfo;
    return androidDeviceInfo.androidId; // 这就是和原生一致的ANDROID_ID
  }
  return null; // 非Android平台返回null
}

关键注意事项

  • 不需要额外申请权限:获取ANDROID_ID属于常规设备信息,Android系统不需要特殊权限申请。
  • 彻底替换旧插件:如果之前项目里用了旧的device_info,建议完全移除并替换为device_info_plus,避免版本兼容问题。

调用上述方法后,你拿到的ID就会和原生Java代码获取的结果完全一致了。

内容的提问来源于stack exchange,提问作者Polivicio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:56