Flutter笔记:获取设备信息

news/2024/7/20 23:02:54 标签: Flutter, Dart, iOS, Android, 设备信息
Flutter笔记
获取设备信息

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/134669785



1. 概述

device_info_plus是一个Flutter插件,用于获取当前设备的信息。它支持AndroidiOS、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,然后使用AndroidiOS和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派生的信息。以下是一些主要的属性:

属性类型描述
boardString底层板的名称,如 “goldfish”
bootloaderString系统引导程序的版本号
brandString与产品/硬件相关的消费者可见品牌(如果有)
deviceString工业设计的名称
displayString用于向用户显示的构建ID字符串
fingerprintString唯一标识此构建的字符串
hardwareString硬件的名称(来自内核命令行或/proc)
hostString主机名
idString更改列表号,或者像"M4-rc20"这样的标签
isPhysicalDevicebool如果应用在模拟器上运行,返回false,否则返回true
manufacturerString产品/硬件的制造商
modelString最终产品的最终用户可见名称
productString整体产品的名称
serialNumberString设备的硬件序列号(如果可用)
supported32BitAbisList此设备支持的32位ABI的有序列表
supported64BitAbisList此设备支持的64位ABI的有序列表
supportedAbisList此设备支持的ABI的有序列表
systemFeaturesList描述当前设备可用的功能
tagsString描述构建的逗号分隔的标签,如 “unsigned,debug”
typeString构建的类型,如 “user” 或 “eng”
versionAndroidBuildVersion来自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派生的信息。以下是一些主要的属性:

属性类型描述示例
nameString设备的名称“John’s iPhone”
systemNameString操作系统的名称iOS
systemVersionString操作系统的版本“13.3.1”
modelString设备的型号“iPhone”
utsname.machineString设备的机器名“iPod7,1”
isPhysicalDevicebool如果应用在模拟器上运行,返回false,否则返回truetrue
identifierForVendorString唯一标识设备的字符串“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派生的信息。以下是一些主要的属性:

属性类型描述
browserNameBrowserName浏览器的名称,例如BrowserName.Chrome
appCodeNameString浏览器的代码名称,例如"Mozilla"
appNameString浏览器的名称,例如"Netscape"
appVersionString浏览器的版本,例如"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537"
platformString浏览器平台,例如"Win32"
userAgentString浏览器的用户代理字符串,例如"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时,你可能需要根据你的具体需求来选择使用哪些属性和方法。以下是一些常见的示例:

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}');

http://www.niftyadmin.cn/n/5230191.html

相关文章

elementui中添加开关控制

<template><!-- 图层管理 --><div class"home-wrapper"><div class"table-list"><div class"list"><el-table :data"tableData" height"100%" style"width: 100%;" border>&…

代码随想录算法训练营第一天 | 704. 二分查找 27. 移除元素

class Solution { public:int search(vector<int>& nums, int target) {int l0;int rnums.size()-1;while(l<r){int mid(lr)>>1;if(targetnums[mid]) return mid;if(target>nums[mid]){lmid1;}else{rmid-1;}}return -1;} }; 之前就已经熟悉二分法了&am…

网狐类源码游戏配置数据库数据(一键配置网狐数据库)

网狐类源码游戏配置数据库数据&#xff08;一键配置网狐数据库&#xff09; 一般拿到网狐的源码或组件&#xff0c;需要先附加或配置数据库&#xff0c;以下为全部需要更改数据的地方&#xff0c;这里以荣耀系列版本数据库为例&#xff1a; 1. 数据库设置 [RYPlatformDB].…

力扣283题 移动零 双指针解法

移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出…

pta题库答案python用来生成PTA题库答案

以下是一个简单的Python程序&#xff0c;可以用来生成PTA题库答案&#xff1a; # 导入所需的模块 import random# 定义一个生成答案的函数 def generate_answer(question):# 随机生成答案options ["A", "B", "C", "D"]answer rando…

【Linux】24、文件系统、磁盘 IO

文章目录 一、文件系统1.1 索引节点和目录项1.2 虚拟文件系统 VFS1.3 文件系统 I/O1.5 性能观测1.5.1 容量1.5.2 缓存1.5.3 find 命令的缓存 二、磁盘 I/O2.1 通用块层2.2 I/O 栈2.3 磁盘性能指标2.3.1 磁盘 I/O 观测2.3.2 进程 I/O 观测 2.4 案例&#xff1a;找到打大量日志的…

探索容灾架构演进之路,从单点到异地多活

1. 挑战与变革 在公司发展初期&#xff0c;业务发展和用户增长是首要关注的焦点。然而&#xff0c;随着业务规模不断扩大&#xff0c;用户数量逐渐攀升&#xff0c;应用稳定性的重要性也变得愈发凸显。在这个演进过程中&#xff0c;传统架构下的应用部署模式开始显露出多方面的…

前端:实现div的隐藏与显示

效果 完整代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…