Flutter笔记:获取设备信息

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

属性类型描述
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时,你可能需要根据你的具体需求来选择使用哪些属性和方法。以下是一些常见的示例:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Protocol handler start failed

背景 上一次启动项目还好好的,关闭项目重新打开时,报错了! 报错提示 英文:Protocol handler start failed 翻译:协议处理程序启动失败 原因 端口被其他程用了,导致端口冲突。 解决方案 打开任务管理…

MIT_线性代数笔记:第 11 讲矩阵空间、秩 1 矩阵和小世界图

目录 新的向量空间 New vector spaces微分方程 Differential equations秩 1 矩阵 Rank one matrices小世界图 Small world graphs 扩展一下向量空间的含义。 新的向量空间 New vector spaces 3X3 矩阵空间 3 by 3 matrices 空间 M 是所有 33 矩阵所构成的空间,M …

MyBatis-Plus动态表名使用selectPage方法不生效问题解析与解决

文章目录 MyBatis-Plus动态表名简介selectPage方法不生效的问题解决方案:SqlParser注解与BaseMapper的selectPage方法示例代码实体类Mapper接口Service层Controller层 总结 🎉MyBatis-Plus动态表名使用selectPage方法不生效问题解析与解决 ☆* o(≧▽≦)…

Python os模块学习(待完善)

Python中的os.listdir()方法及获取文件夹中所有文件的路径 python io.StringIO函数

【LeetCode 0170】【哈希】两数之和(3) 数据结构设计

https://leetcode.com/problems/two-sum-iii-data-structure-design/ 描述 Design and implement a TwoSum class. It should support the following operations: add and find. add(input) – Add the number input to an internal data structure. find(value) – Find if …

力扣 --- 加油站

题目描述: 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个…

126. 单词接龙 II

126. 单词接龙 II 需要注意的是,由于要找最短路径,连接 dot 与 lot 之间的边就不可以被记录下来,同理连接 dog 与 log 之间的边也不可以被记录。这是因为经过它们的边一定不会是最短路径。因此在广度优先遍历的时候,需要记录的图…

ROS话题消息实时展示在WEB网页上

【使用背景】 最近公司搞了一个室外无人车的项目,需要用到GPS组合惯导,但是这套传感器由于成本控制,它没有提供小程序或是APP之类的数据监测手段,只能通过一个Windows上位机软件去看GPS实时数据,这对于单人外场调试来…

环保与节能:气膜建筑的独特魅力

在当今社会,环保和节能已经成为建筑设计和发展的关键考量因素。气膜建筑以其独特的设计和结构,成为了绿色建筑的杰出代表。接下来由轻空间带您了解气膜建筑的环保与节能特性,揭示其在可持续发展中的独特魅力。 轻巧材料,绿色环保 …

mysql语句性能分析工具——profiling

以往我们已经介绍了一个mysql的分析工具:mysql慢查询日志分析工具(pt-query-digest),可以看我的文章:mysql慢查询日志分析工具(pt-query-digest)-CSDN博客 一、profiling的介绍 sql查询慢的情况很常见,对…

Linux:docker的网络通信(7)

1.端口映射 端口映射---端口映射机制将容器内的服务提供给外部网络访问 启动容器时,不指定对应的端口,在容器外无法通过网络访问容器内的服务 可随机或指定映射端口范围 -P ---------大写P,开启随机端口 -p 宿主机端口:容器端口…

金蝶Apusic应用服务器 任意文件上传漏洞复现

0x01 产品简介 金蝶Apusic应用服务器(Apusic Application Server,AAS)是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件,全面支持JakartaEE8/9的技术规范,提供满足该规范的Web容器、EJB容器以及WebSer…

PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()

背景 近期在做 excel文件数据导出时,遇到如下报错: iconv(): Detected an illegal character in input string场景:计划任务后台,分步导出 大数据 excel文件发现在加载文件时,会有报错 报错信息 如下: {&q…

振南技术干货集:各大平台串口调试软件大赏(5)

注解目录 (串口的重要性不言而喻。为什么很多平台把串口称为 tty,比如 Linux、MacOS 等等,振南告诉你。) 1、各平台上的串口调试软件 1.1Windows 1.1.1 STCISP (感谢 STC 姚老板设计出 STCISP 这个软件。&#xf…

【代码】两阶段鲁棒优化/微电网经济调度入门到编程

内容包括 matlab-yalmipcplex微电网两阶段鲁棒经济调度(刘) matlab-yalmipcplex两阶段鲁棒微电网容量经济优化调度 两阶段鲁棒优化CCG列于约束生成和Benders代码,可扩展改编,复现自原外文论文 【赠送】虚拟储能单元电动汽车建…

VsCode 调试 MySQL 源码

1. 启动 MySQL 2. 查看 MySQL 进程号 [root ~]# ps -ef | grep mysqld root 21479 1 0 Nov01 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir/usr/local/mysql/data --pid-file/usr/local/mysql/data/mysqld.pid root 26622 21479 0 …

上拉、下拉电阻的作用

上拉、下拉电阻的作用 (1)一般作为单键触发使用,如果芯片本身没有内接电阻,为了使单键维持在不被触发的状态或触发后回到原状态,必须在芯片外部接一个电阻,即保持芯片引脚高电平(或低电平)输入,这样单击按键…

注解原理是什么 Spring MVC常用的注解有哪些?

文章目录 注解原理是什么Spring MVC常用的注解有哪些? 通过这篇文章来和大家一起认识springMVC常用的注解,那么首先需要来了解注解。 注解原理是什么 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。…

2023认证杯小美赛数学建模国际赛ABCD题思路及python代码分享

大家好呀,认证杯小美赛数学建模开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次小美赛难度:D<A≈C<B。推荐选择D题。预计12.2中午更新D完整论文。预定论文请往后滑看完本文档链接。 A…

Apache2.4 AliasMatch导致301重定向问题?

环境:ubuntu18.04-desktop apache2版本: rootubuntu:/etc/apache2# apache2ctl -v Server version: Apache/2.4.29 (Ubuntu) Server built: 2023-03-08T17:34:33apache配置: DocumentRoot /var/www/html # Alias就没事 # Alias "/my…