Flutter中如何获取Android设备名称?device_info_plus无效求推荐
解决Android设备名称获取问题的替代方案
方案1:升级device_info_plus并组合字段
当前使用的v4.1.2版本较旧,升级到最新版本后,可通过组合brand和model字段得到更贴近真实设备名称的结果:
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; String deviceName = "${androidInfo.brand} ${androidInfo.model}"; print(deviceName);
真实设备中,brand会返回厂商名称(如Xiaomi、Samsung),model返回具体型号标识(如2304FPN6DC、SM-S918B),组合后就是常见的设备名称格式。
方案2:通过MethodChannel调用Android原生API获取自定义设备名称
如果需要获取用户在系统设置中自定义的设备名称(而非默认厂商型号),可自行通过MethodChannel实现原生调用:
Dart端代码
import 'package:flutter/services.dart'; class DeviceNameHelper { static const MethodChannel _channel = MethodChannel('device_name_channel'); static Future<String?> getCustomDeviceName() async { try { return await _channel.invokeMethod('getDeviceName'); } on PlatformException catch (e) { print("获取设备名称失败: ${e.message}"); return null; } } }
Android原生端代码(MainActivity.kt)
import android.provider.Settings import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private val CHANNEL = "device_name_channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> if (call.method == "getDeviceName") { val deviceName = Settings.Global.getString(contentResolver, Settings.Global.DEVICE_NAME) if (deviceName != null) { result.success(deviceName) } else { // 如果没有自定义名称,返回厂商+型号 val defaultName = "${android.os.Build.MANUFACTURER} ${android.os.Build.MODEL}" result.success(defaultName) } } else { result.notImplemented() } } } }
这种方式优先获取用户自定义的设备名称,若不存在则返回默认的厂商型号组合,覆盖更多场景。
方案3:使用flutter_device_name包
可尝试第三方包flutter_device_name,它专门用于获取设备的友好名称,使用方式如下:
import 'package:flutter_device_name/flutter_device_name.dart'; String? deviceName = await FlutterDeviceName.getDeviceName(); print(deviceName);
该包内部封装了原生API,简化了自定义设备名称的获取流程。
内容的提问来源于stack exchange,提问作者RuchDi
相关产品推荐
相关产品推荐

