Flutter设备信息获取插件devicesinfo的使用
Flutter设备信息获取插件devicesinfo的使用
获取Android设备详细信息
Getting Started
本项目是一个用于Flutter的插件包,它包含适用于Android和/或iOS平台的特定实现代码。
对于Flutter开发的帮助,可以参阅在线文档,其中提供了教程、示例、移动端开发指导以及完整的API引用。
Flutter版DeviceLibray
https://github.com/z244370114/devicesinfo
Step 1. 添加JitPack仓库到你的构建文件
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. 添加依赖
dependencies {
implementation 'com.github.z244370114:DeviceLibray:1.0.4'
}
3. 使用说明
- 需要在Application的
onCreate()
方法里面调用UtilsApp.init(this)
进行初始化上下文。 - 需要注意的是
FileUtils.getSDDeviceTxt()
,该方法根据算法得到唯一的device_id,判断设备唯一性。
4. 应用
下载源码安装直观查看对应字段数据明细。
HOME(首页)
sdka
hardware(硬件)
字段名 | 类型 | 说明 |
---|---|---|
model | String | 设备型号 |
brand | String | 设备品牌 |
product | String | 产品名称 |
release | String | 系统版本 |
sdk_version_code | String | SDK版本号 |
physical_size | String | 物理尺寸 |
cpu_type | String | CPU名字 |
cpu_min | String | CPU最小频率 |
cpu_max | String | CPU最大频率 |
cpu_cur | String | CPU当前频率 |
manufacturer_name | String | 制造商 |
board | String | 主板名称 |
serial_number | String | 设备序列号 |
display | String | 显示屏参数 |
id | String | 修订版本列表 |
bootloader | String | 系统引导加载程序版本号 |
finger_print | String | 设备指纹 |
host | String | 执行代码编译的Host值 |
hardware | String | 硬件名 |
device | String | 设备参数 |
user | String | 执行代码编译的User值 |
radio_version | String | 无线电固件版本 |
tags | String | 描述Build的标签 |
time | String | 编译时间 |
type | String | builder类型 |
base_os | String | build基本操作系统 |
baseband_ver | String | 基带版本 |
resolution | String | 设备分辨率 |
screen_density | String | 屏幕密度(像素比例:0.75/1.0/1.5/2.0) |
screen_density_dpi | String | 屏幕密度(每寸像素:120/160/240/320) |
cpu_abi | String | 获取设备指令集名称 |
cpu_abi2 | String | 获取第二个指令集名称 |
abis | String | 手机CPU架构,支持的指令集 |
is_tablet | int | 是否是平板(1:是;0:不是) |
general_data(通用数据)
字段名 | 类型 | 说明 |
---|---|---|
and_id | String | 安卓ID |
gaid | String | GAID |
network_operator_name | String | 网络运营商名称 |
network_operator | String | 当前注册运营商的数字名称(MCC + MNC) |
network_type | String | 当前网络类型 |
phone_type | String | |
mcc | String | Mcc / IMSI MCC(移动国家代码) |
bluetooth_mac | String | 蓝牙mac地址 |
mnc | String | Mnc / IMSI MNC(移动网络代码) |
locale_iso_3_language | String | 语言环境的三字母缩写 |
locale_iso_3_country | String | 此地区的国家/地区的缩写 |
time_zone_id | String | 时区的ID |
locale_display_language | String | 用户显示的语言环境语言的名称 |
cid | String | 基站编号 |
dns | String | |
uuid | String | 设备标识符UUID |
slot_count | int | 支持卡槽数量(sdk_version>=23才可取值,否则为0) |
meid | String | 移动设备识别码, 卡槽移动设备身份码1(android 10及以上无法取) |
imei2 | String | 卡槽移动设备身份码2(android 10及以上无法取) |
mac | String | mac地址 |
language | String | 本地语言 |
ui_mode_type | String | 当前设备支持的UI类型 |
security_patch | String | 安全补丁更新日期 |
sim_card
字段名 | 类型 | 说明 |
---|---|---|
sim_count | int | 设备当前sim卡数量 |
imsi1 | String | sim卡1移动用户身份 |
sim_country_iso1 | String | sim卡1ISO国家代码等同于SIM提供商的国家代码 |
sim_serial_number1 | String | sim卡1的序列号 |
number1 | String | sim卡1对应手机号 |
imsi2 | String | sim卡2移动用户身份 |
sim_country_iso2 | String | sim卡2ISO国家代码等同于SIM提供商的国家代码 |
sim_serial_number2 | String | sim卡2的序列号 |
number2 | String | sim卡2对应手机号 |
storage(存储)
字段名 | 类型 | 说明 |
---|---|---|
device_id | String | 关联设备表下deviceId |
ram_total_size | long | 运行内存总大小(单位byte) |
ram_usable_size | long | 运行内存可用大小(单位byte) |
internal_storage_total | long | 内部存储总空间(单位byte) |
internal_storage_usable | long | 内部存储可用空间(单位byte) |
memory_card_size | long | SD卡总空间(单位byte) |
memory_card_size_use | long | SD卡已用空间(单位byte) |
other_data(其它数据)
字段名 | 类型 | 说明 |
---|---|---|
root_jailbreak | Int | 是否root(0:不是;1:是) |
simulator | Int | 是否为模拟器(0:不是;1:是) |
keyboard | String | 底部是否有物理按键:有:1;无:0 |
dbm | String | 手机的信号强度(>-90,越大信号越强;""表示未取到) |
last_boot_time | Long | 最后一次开机时间,以毫秒为单位 |
is_using_vpn | Int | 是否使用vpn(0:不是;1:是) |
vpn_address | String | vpn代理地址 |
is_using_proxy_port | Int | 是否使用代理(0:不是;1:是) |
http_proxy_host_port | String | http代理host:port |
is_usb_debug | Int | 是否开启debug调试(0:不是;1:是) |
is_mock_location | Int | 是否允许位置模拟(0:不是;1:是) |
ringer_mode | Int | 0:RINGER_MODE_SILENT(静音模式) 1:RINGER_MODE_VIBRATE(震动模式) 2:RINGER_MODE_NORMAL(铃音模式) |
is_airplane_mode | Int | 是否开启飞行模式(0:不是;1:是) |
applist(app安装)
字段名 | 类型 | 说明 |
---|---|---|
app_name | String | 已安装应用:APP名称 |
package_name | String | 已安装应用:包名 |
in_time | Long | 已安装应用:安装时间 |
up_time | Long | 已安装应用:最后更新时间 |
version_name | String | 版本名称 |
version_code | Int | 版本号 |
flags | Int | 应用标签 |
app_type | Int | 是否系统应用(1:系统应用;0:非系统应用) |
special_permisson_list | List | 获取app特殊权限项 |
contact(联系人)
字段名 | 类型 | 说明 |
---|---|---|
contact_display_name | String | 联系人名称 |
number | String | 联系人列表:电话号码 |
up_time | Long | 联系人列表:更新时间 |
last_time_contacted | Long | 与联系人最后联系时间 |
times_contacted | int | 联系次数 |
starred | int | 是否收藏联系人(1:收藏;0:未收藏) |
String | 电子邮件地址 |
GPS(定位)-客户端改动
字段名 | 类型 | 说明 |
---|---|---|
latitude | String | 维度 |
longitude | String | 经度 |
addressDetails | String | GPS详细地址 |
media_files(媒体文件)
字段名 | 类型 | 说明 |
---|---|---|
audio_internal | Int | 音频内部文件个数 |
audio_external | Int | 音频外部文件个数 |
images_internal | Int | 图片内部文件个数 |
images_external | Int | 图片外部文件个数 |
video_internal | Int | 视频内部文件个数 |
video_external | Int | 视频外部文件个数 |
download_files | Int | 下载的文件个数 |
contact_group | int | 联系人小组个数(基数默认偏大,会算上自带群组名) |
network(网络)
字段名 | 类型 | 说明 |
---|---|---|
ip | String | 路由器IP |
router_name | String | 路由器名字(Server根据当前wifi的bssid查) |
current_wifi[].bssid | String | 当前的wifi BSSID |
current_wifi[].ssid | String | 当前的wifi SSID |
current_wifi[].name | String | wifi名称 |
current_wifi[].mac | String | 当前的wifi mac地址 |
configured_wifi[].bssid | String | 配置wifi BSSID |
configured_wifi[].ssid | String | 配置wifi SSID |
configured_wifi[].name | String | wifi名称 |
battery_status(电池)
字段名 | 类型 | 说明 |
---|---|---|
is_charging | int | 是否正在充电(1:未知状态;2:充电中;3:放电中;4:未充电;5:充满) |
battery_pct | Double | 电池百分比(0-100) |
charge_type | int | 1:BATTERY_PLUGGED_AC(充电器) 2:BATTERY_PLUGGED_USB(USB充电) 4:BATTERY_PLUGGED_ANY(其它) |
battery_health | int | 1:BATTERY_HEALTH_UNKNOWN(未知) 2:BATTERY_HEALTH_GOOD(良好) 3:BATTERY_HEALTH_OVERHEAT(过热) 4:BATTERY_HEALTH_DEAD(没电) 5:BATTERY_HEALTH_OVER_VOLTAGE(过电压) 6:BATTERY_HEALTH_UNSPECIFIED_FAILURE(未知错误) 7:BATTERY_HEALTH_COLD(温度过低) |
battery_temperature | Double | 电池温度(单位0.1,如359表示35.9°C) |
screen_brightness | Double | 屏幕亮度(0-255) |
sensor(传感器)
字段名 | 类型 | 说明 |
---|---|---|
sensor_lists[].type | int | 传感器的类型 |
sensor_lists[].name | String | 传感器的名字 |
sensor_lists[].version | int | 传感器的版本号 |
sensor_lists[].vendor | String | Vendor名 |
sensor_lists[].max_range | float | 传感器的最大值 |
sensor_lists[].min_delay | float | 传感器的最小值 |
sensor_lists[].power | float | 传感器的功率 |
sensor_lists[].resolution | float | 传感器的精度 |
5. app下载地址与二维码,以便安装查看数据列表
你认为还有哪些地方需要作者更新,都可以提出。作者会抽时间完善。
最后,如果你觉得对你有用,麻烦给一个star!
如果这个项目对您有很大帮助,并且您想支持该项目的开发和维护,请随时扫描以下二维码进行捐赠。非常感谢您的捐赠。谢谢!
示例代码
import 'package:devicesinfo/devicesinfo_method_channel.dart';
import 'package:devicesinfo/devicesinfo_platform_interface.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:devicesinfo/devicesinfo.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _devicesinfoPlugin = Devicesinfo();
@override
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,因此我们在异步方法中初始化
Future<void> initPlatformState() async {
String platformVersion = "";
// 平台消息可能会失败,所以我们使用try/catch处理PlatformException。
// 我们也处理消息可能返回null的情况。
try {
// platformVersion =
// await _devicesinfoPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
MethodChannelDevicesinfo.initApp();
var generalData = await MethodChannelDevicesinfo.getGeneralData();
platformVersion = generalData!;
print(generalData);
// 如果小部件在异步平台消息仍在飞行时从树中移除,我们希望丢弃回复而不是调用setState来更新我们的不存在的外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Text('运行在: $_platformVersion\n'),
),
),
);
}
}
更多关于Flutter设备信息获取插件devicesinfo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter设备信息获取插件devicesinfo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你想获取设备的信息,可以使用 device_info_plus
插件。device_info_plus
是一个跨平台的插件,可以获取 Android、iOS、Web、Windows、macOS 和 Linux 设备的信息。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 device_info_plus
插件的依赖:
dependencies:
flutter:
sdk: flutter
device_info_plus: ^9.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 device_info_plus
插件:
import 'package:device_info_plus/device_info_plus.dart';
3. 获取设备信息
你可以使用 DeviceInfoPlugin
类来获取设备信息。以下是一个简单的示例,展示如何获取设备信息并打印出来:
import 'package:flutter/material.dart';
import 'package:device_info_plus/device_info_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: DeviceInfoScreen(),
);
}
}
class DeviceInfoScreen extends StatefulWidget {
[@override](/user/override)
_DeviceInfoScreenState createState() => _DeviceInfoScreenState();
}
class _DeviceInfoScreenState extends State<DeviceInfoScreen> {
String _deviceInfo = 'Unknown';
[@override](/user/override)
void initState() {
super.initState();
_getDeviceInfo();
}
Future<void> _getDeviceInfo() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
if (Theme.of(context).platform == TargetPlatform.android) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
setState(() {
_deviceInfo = 'Android: ${androidInfo.model}, SDK: ${androidInfo.version.sdkInt}';
});
} else if (Theme.of(context).platform == TargetPlatform.iOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
setState(() {
_deviceInfo = 'iOS: ${iosInfo.utsname.machine}, Version: ${iosInfo.systemVersion}';
});
} else if (Theme.of(context).platform == TargetPlatform.windows) {
WindowsDeviceInfo windowsInfo = await deviceInfo.windowsInfo;
setState(() {
_deviceInfo = 'Windows: ${windowsInfo.computerName}, Version: ${windowsInfo.buildNumber}';
});
} else if (Theme.of(context).platform == TargetPlatform.macOS) {
MacOsDeviceInfo macOsInfo = await deviceInfo.macOsInfo;
setState(() {
_deviceInfo = 'macOS: ${macOsInfo.model}, Version: ${macOsInfo.osRelease}';
});
} else if (Theme.of(context).platform == TargetPlatform.linux) {
LinuxDeviceInfo linuxInfo = await deviceInfo.linuxInfo;
setState(() {
_deviceInfo = 'Linux: ${linuxInfo.name}, Version: ${linuxInfo.version}';
});
} else {
WebBrowserInfo webBrowserInfo = await deviceInfo.webBrowserInfo;
setState(() {
_deviceInfo = 'Web: ${webBrowserInfo.browserName}, Version: ${webBrowserInfo.appVersion}';
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Device Info'),
),
body: Center(
child: Text(_deviceInfo),
),
);
}
}