Flutter笔记获取设备信息
1. 概述
device_info_plus是一个Flutter插件,用于获取当前设备的信息。它支持Android、iOS、MacOS、Web、Linux和Windows平台。
2. 安装和导入
首先,你需要在你的pubspec.yaml文件中添加device_info_plus作为依赖。然后,你可以在你的代码中导入device_info_plus/device_info_plus.dart。
import 'package:device_info_plus/device_info_plus.dart';
接着运行 flutter pub get 完成安装。
3. 使用方法
如果你想在Android上获取设备的序列号,你的应用需要满足官方的一些要求。如果应用不满足这些要求,插件将返回unknown。
3.1 获取设备信息
你可以实例化DeviceInfoPlugin,然后使用Android、iOS和Web的getter来获取特定平台的设备信息。
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; print('Running on ${androidInfo.model}'); // e.g. "Moto G (4)" IosDeviceInfo iosInfo = await deviceInfo.iosInfo; print('Running on ${iosInfo.utsname.machine}'); // e.g. "iPod7,1" WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo; print('Running on ${webBrowserInfo.userAgent}'); // e.g. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
3.2 获取设备信息的通用方法
插件提供了一个返回平台特定设备信息的通用方法,这可以用于崩溃报告等目的。但是,这个方法返回的数据目前不可序列化(即,它不是100%的JSON兼容),因此不应该被当作JSON来处理。
final deviceInfoPlugin = DeviceInfoPlugin(); final deviceInfo = await deviceInfoPlugin.deviceInfo; final allInfo = deviceInfo.data;
4. 设备信息类详解
device_info_plus库提供了多个类,每个类都有一些特定的属性。以下是一些主要的类和它们的属性:
4.1 AndroidDeviceInfo类
这个类提供了从android.os.Build派生的信息。以下是一些主要的属性:
属性 | 类型 | 描述 |
board | String | 底层板的名称,如 “goldfish” |
bootloader | String | 系统引导程序的版本号 |
brand | String | 与产品/硬件相关的消费者可见品牌(如果有) |
device | String | 工业设计的名称 |
display | String | 用于向用户显示的构建ID字符串 |
fingerprint | String | 唯一标识此构建的字符串 |
hardware | String | 硬件的名称(来自内核命令行或/proc) |
host | String | 主机名 |
id | String | 更改列表号,或者像"M4-rc20"这样的标签 |
isPhysicalDevice | bool | 如果应用在模拟器上运行,返回false,否则返回true |
manufacturer | String | 产品/硬件的制造商 |
model | String | 最终产品的最终用户可见名称 |
product | String | 整体产品的名称 |
serialNumber | String | 设备的硬件序列号(如果可用) |
supported32BitAbis | List | 此设备支持的32位ABI的有序列表 |
supported64BitAbis | List | 此设备支持的64位ABI的有序列表 |
supportedAbis | List | 此设备支持的ABI的有序列表 |
systemFeatures | List | 描述当前设备可用的功能 |
tags | String | 描述构建的逗号分隔的标签,如 “unsigned,debug” |
type | String | 构建的类型,如 “user” 或 “eng” |
version | AndroidBuildVersion | 来自android.os.Build.VERSION的Android操作系统版本值 |
例如:
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; print('Running on ${androidInfo.model}'); // 输出 "Running on sdk_gphone_x86_arm" print('Brand: ${androidInfo.brand}'); // 输出 "Brand: google" print('Is physical device: ${androidInfo.isPhysicalDevice}'); // 输出 "Is physical device: false"
4.2 IosDeviceInfo类
这个类提供了从UIDevice派生的信息。以下是一些主要的属性:
属性 | 类型 | 描述 | 示例 |
name | String | 设备的名称 | “John’s iPhone” |
systemName | String | 操作系统的名称 | “iOS” |
systemVersion | String | 操作系统的版本 | “13.3.1” |
model | String | 设备的型号 | “iPhone” |
utsname.machine | String | 设备的机器名 | “iPod7,1” |
isPhysicalDevice | bool | 如果应用在模拟器上运行,返回false,否则返回true | true |
identifierForVendor | String | 唯一标识设备的字符串 | “E621E1F8-C36C-495A-93FC-0C247A3E6E5F” |
这些属性都是只读的,不能被修改。要获取这些属性,你需要先实例化DeviceInfoPlugin,然后调用iosInfo方法。例如:
IosDeviceInfo iosInfo = await deviceInfo.iosInfo; print('Device name: ${iosInfo.name}'); // e.g. "John's iPhone" print('System name: ${iosInfo.systemName}'); // e.g. "iOS" print('System version: ${iosInfo.systemVersion}'); // e.g. "13.3.1" print('Model: ${iosInfo.model}'); // e.g. "iPhone" print('Machine: ${iosInfo.utsname.machine}'); // e.g. "iPod7,1" print('Is physical device: ${iosInfo.isPhysicalDevice}'); // e.g. true print('Identifier for vendor: ${iosInfo.identifierForVendor}'); // e.g. "E621E1F8-C36C-495A-93FC-0C247A3E6E5F"
4.3 WebBrowserInfo类
这个类提供了从navigator派生的信息。以下是一些主要的属性:
属性 | 类型 | 描述 |
browserName | BrowserName | 浏览器的名称,例如BrowserName.Chrome |
appCodeName | String | 浏览器的代码名称,例如"Mozilla" |
appName | String | 浏览器的名称,例如"Netscape" |
appVersion | String | 浏览器的版本,例如"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537" |
platform | String | 浏览器平台,例如"Win32" |
userAgent | String | 浏览器的用户代理字符串,例如"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" |
以下是如何在代码中使用这些属性的示例:
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo; print('Browser Name: ${webBrowserInfo.browserName}'); print('App Code Name: ${webBrowserInfo.appCodeName}'); print('App Name: ${webBrowserInfo.appName}'); print('App Version: ${webBrowserInfo.appVersion}'); print('Platform: ${webBrowserInfo.platform}'); print('User Agent: ${webBrowserInfo.userAgent}');
这段代码将打印出当前浏览器的名称、代码名称、名称、版本、平台和用户代理字符串。
5. 使用示例与应用场景
在使用device_info_plus时,你可能需要根据你的具体需求来选择使用哪些属性和方法。以下是一些常见的示例:
- 获取Android设备的型号:
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; print('Running on ${androidInfo.model}');
- 获取iOS设备的机器名:
IosDeviceInfo iosInfo = await deviceInfo.iosInfo; print('Running on ${iosInfo.utsname.machine}');
- 获取Web浏览器的用户代理信息:
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo; print('Running on ${webBrowserInfo.userAgent}');