Flutter安卓工具类插件android_util的使用
Flutter安卓工具类插件android_util
的使用
获取Android IP地址
本项目是一个用于Flutter的插件包,它包含了Android和/或iOS平台上的特定实现代码。
对于Flutter开发的帮助,请查看我们的在线文档,其中包含教程、示例、移动开发指导以及完整的API参考。
使用示例
以下是使用android_util
插件的完整示例代码:
import 'dart:async';
import 'package:android_util/android_ip.dart';
import 'package:android_util/pigeon.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _Connecton_change = '';
String _ondeviceconnected = '';
String _wifiname = '';
String _ondeviceconnected2 = '';
String _status = '';
String _IpAddress_Wifi_tether = 'Unknown';
bool _isHotspot = false;
bool _isWifi = false;
String _IpAddress_Wifi_both = 'Unknown';
String _IpAddress_Wifi = 'Unknown';
String _IpAddress_Private = 'Unknown';
String _IpAddress_USB_tether = 'Unknown';
String _IpAddress_All = 'Unknown';
String _IpAddress_Cellular2 = 'Unknown';
String _IpAddress_Cellular1 = 'Unknown';
String _IpAddress_Cell = 'Unknown';
String _IpAddress_Blue_ther = 'Unknown';
String _connectedlist = '';
NetworkResult? networkResult = null;
late AndroidIp androidIp;
[@override](/user/override)
initState() {
super.initState();
androidIp = new AndroidIp();
var listner = androidIp.onConnectivityChanged;
var ondeviceconnected = androidIp.onDeviceConnected;
permissionchanged();
androidIp.onPortbyIp!.listen((event) {
print(event);
});
var arguments2 = {
'ip': '192.168.42.129',
};
var arguments = {
'ip': '148.72.210.101',
'timeout': '10000'
};
androidIp.onIpConnected(arguments)!.listen((event) {
print("============>" + event);
});
listner!.listen((event) {
setState(() {
_Connecton_change = event;
});
initPlatformState();
});
ondeviceconnected!.listen((event) {
setState(() {
_ondeviceconnected = _ondeviceconnected + "," + event;
});
});
initPlatformState();
}
permissionchanged() {
var da = androidIp.onPermissionChanged!.listen((event) {
print("${event.name}${event.status}");
initPlatformState();
});
}
// 平台消息是异步的,因此我们在异步方法中初始化。
Future<void> initPlatformState() async {
String IpAddress_Wifi_tether;
String IpAddress_Wifi;
String IpAddress_Wifi_both;
String IpAddress_Private;
String IpAddress_USB_tether;
String IpAddress_Cellular1;
String IpAddress_Cellular2;
String IpAddress_Blue_ther;
String IpAddress_All;
bool isHotspot = false;
bool isWifi = false;
// 平台消息可能会失败,所以我们使用一个带有PlatformException的try/catch。
// 我们还处理了消息可能返回null的情况。
try {
networkResult = await AndroidIp.networkresult;
IpAddress_Wifi_tether = (networkResult)!.wifi_tether ?? 'Unknown Number';
IpAddress_Wifi_both = networkResult?.wifiboth ?? 'Unknown Number';
IpAddress_Wifi = networkResult?.wifi ?? 'Unknown Number';
IpAddress_Private = await AndroidIp.IpAddress_Private ?? 'Unknown Number';
IpAddress_USB_tether = await AndroidIp.IpAddress_USB_tether ?? 'Unknown Number';
IpAddress_Cellular1 = await AndroidIp.IpAddress_Cellular1 ?? 'Unknown Number';
IpAddress_Cellular2 = await AndroidIp.IpAddress_Cellular2 ?? 'Unknown Number';
IpAddress_Blue_ther = await AndroidIp.IpAddress_Blue_ther ?? 'Unknown Number';
IpAddress_All = await AndroidIp.IpAddress_All ?? 'Unknown Number';
isHotspot = await AndroidIp.isHotspotEnabled ?? false;
isWifi = await AndroidIp.isWifiEnabled ?? false;
_wifiname = networkResult?.WifiName ?? "";
} on PlatformException {
IpAddress_Wifi_tether = 'Failed to get ';
IpAddress_Wifi = 'Failed to get ';
IpAddress_Private = 'Failed to get ';
IpAddress_USB_tether = 'Failed to get ';
IpAddress_Cellular1 = 'Failed to get ';
IpAddress_Cellular2 = 'Failed to get ';
IpAddress_Blue_ther = 'Failed to get ';
IpAddress_All = 'Failed to get ';
IpAddress_Wifi_both = 'Failed to get ';
}
// 如果小部件在异步平台消息处理期间从树中移除,我们希望丢弃回复而不是调用setState来更新我们的非存在的外观。
if (!mounted) return;
setState(() {
_IpAddress_Wifi_tether = IpAddress_Wifi_tether;
_IpAddress_Wifi = IpAddress_Wifi;
_IpAddress_Private = IpAddress_Private;
_IpAddress_USB_tether = IpAddress_USB_tether;
_IpAddress_Cellular1 = IpAddress_Cellular1;
_IpAddress_Cellular2 = IpAddress_Cellular2;
_IpAddress_Blue_ther = IpAddress_Blue_ther;
_IpAddress_All = IpAddress_All;
_IpAddress_Wifi_both = IpAddress_Wifi_both;
_isHotspot = isHotspot;
_isWifi = isWifi;
_wifiname;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: ListView(
children: [
Column(
children: [
Text('连接变化: $_Connecton_change\n'),
Row(
children: [
Text('WiFi: $_IpAddress_Wifi\n'),
SizedBox(width: 25),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi)),
],
),
Row(
children: [
Text('WiFi Tether: $_IpAddress_Wifi_tether\n'),
SizedBox(width: 25),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi_tether)),
],
),
Text('私有: $_IpAddress_Private\n'),
Row(
children: [
Text('WiFi Tether Both: $_IpAddress_Wifi_both\n'),
SizedBox(width: 25),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi_both)),
],
),
Text('蜂窝网络2: $_IpAddress_Cellular2\n'),
Row(
children: [
Text('USB Tether: $_IpAddress_USB_tether\n'),
SizedBox(width: 25),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_USB_tether)),
],
),
Row(
children: [
Text('蓝牙 Tether: $_IpAddress_Blue_ther\n'),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Blue_ther)),
],
),
Text("热点: $_isHotspot"),
Text("WiFi: $_isWifi"),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('$_ondeviceconnected2'),
RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => setLisIp()),
],
),
Text('设备: $_ondeviceconnected'),
Text('WiFi名称: $_wifiname'),
Text('所有: $_IpAddress_All\n'),
RaisedButton(
color: Colors.blue,
child: Text("分享"),
onPressed: () async {
await AndroidIp.shareAPKFile;
},
),
Text("状态: $_status"),
RaisedButton(
color: Colors.blue,
child: Text("分享"),
onPressed: () async {
setShare();
},
),
RaisedButton(
color: Colors.blue,
child: Text("打开设置"),
onPressed: () async {
await AndroidIp.OpenSettings;
},
),
RaisedButton(
color: Colors.blue,
child: Text("启用WiFi"),
onPressed: () async {
await AndroidIp.EnableWifi;
},
),
RaisedButton(
color: Colors.blue,
child: Text("启用热点"),
onPressed: () async {
Hotspot hotspot = await AndroidIp.SetHotspotEnable;
print("======>${hotspot.encode()}");
},
),
RaisedButton(
color: Colors.blue,
child: Text("启用权限 ${networkResult?.IsLocationEnabled} "),
onPressed: () async {
await AndroidIp.EnablePermission;
},
),
RaisedButton(
color: Colors.blue,
child: Text("存储"),
onPressed: () async {
await AndroidIp.EnableStoragePermission;
},
),
RaisedButton(
color: Colors.blue,
child: Text("对等"),
onPressed: () async {
await AndroidIp.getP2pNames;
},
),
],
),
],
),
),
);
}
_copy(String ipAddress_Wifi) {
var clipboardData = ClipboardData(text: ipAddress_Wifi);
Clipboard.setData(clipboardData);
}
setLisIp() {
setState(() {
_ondeviceconnected2 = "";
});
var da = androidIp.onDeviceConnected!.listen((event) {
setState(() {
_ondeviceconnected2 = _ondeviceconnected2 + "," + event;
});
});
}
setShare() {
setState(() {
_status = "";
});
var da = androidIp.onShared!.listen((event) {
setState(() {
_status = event;
});
});
}
}
代码解释
-
导入库
import 'dart:async'; import 'package:android_util/android_ip.dart'; import 'package:android_util/pigeon.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart';
-
初始化
void main() { runApp(MyApp()); }
-
定义状态变量
class _MyAppState extends State<MyApp> { String _Connecton_change = ''; String _ondeviceconnected = ''; String _wifiname = ''; String _ondeviceconnected2 = ''; String _status = ''; String _IpAddress_Wifi_tether = 'Unknown'; bool _isHotspot = false; bool _isWifi = false; String _IpAddress_Wifi_both = 'Unknown'; String _IpAddress_Wifi = 'Unknown'; String _IpAddress_Private = 'Unknown'; String _IpAddress_USB_tether = 'Unknown'; String _IpAddress_All = 'Unknown'; String _IpAddress_Cellular2 = 'Unknown'; String _IpAddress_Cellular1 = 'Unknown'; String _IpAddress_Cell = 'Unknown'; String _IpAddress_Blue_ther = 'Unknown'; String _connectedlist = '';
-
初始化插件
late AndroidIp androidIp; [@override](/user/override) initState() { super.initState(); androidIp = new AndroidIp(); var listner = androidIp.onConnectivityChanged; var ondeviceconnected = androidIp.onDeviceConnected; permissionchanged(); androidIp.onPortbyIp!.listen((event) { print(event); }); var arguments2 = { 'ip': '192.168.42.129', }; var arguments = { 'ip': '148.72.210.101', 'timeout': '10000' }; androidIp.onIpConnected(arguments)!.listen((event) { print("============>" + event); }); listner!.listen((event) { setState(() { _Connecton_change = event; }); initPlatformState(); }); ondeviceconnected!.listen((event) { setState(() { _ondeviceconnected = _ondeviceconnected + "," + event; }); }); initPlatformState(); }
-
处理权限更改
permissionchanged() { var da = androidIp.onPermissionChanged!.listen((event) { print("${event.name}${event.status}"); initPlatformState(); }); }
-
初始化平台状态
Future<void> initPlatformState() async { String IpAddress_Wifi_tether; String IpAddress_Wifi; String IpAddress_Wifi_both; String IpAddress_Private; String IpAddress_USB_tether; String IpAddress_Cellular1; String IpAddress_Cellular2; String IpAddress_Blue_ther; String IpAddress_All; bool isHotspot = false; bool isWifi = false; try { networkResult = await AndroidIp.networkresult; IpAddress_Wifi_tether = (networkResult)!.wifi_tether ?? 'Unknown Number'; IpAddress_Wifi_both = networkResult?.wifiboth ?? 'Unknown Number'; IpAddress_Wifi = networkResult?.wifi ?? 'Unknown Number'; IpAddress_Private = await AndroidIp.IpAddress_Private ?? 'Unknown Number'; IpAddress_USB_tether = await AndroidIp.IpAddress_USB_tether ?? 'Unknown Number'; IpAddress_Cellular1 = await AndroidIp.IpAddress_Cellular1 ?? 'Unknown Number'; IpAddress_Cellular2 = await AndroidIp.IpAddress_Cellular2 ?? 'Unknown Number'; IpAddress_Blue_ther = await AndroidIp.IpAddress_Blue_ther ?? 'Unknown Number'; IpAddress_All = await AndroidIp.IpAddress_All ?? 'Unknown Number'; isHotspot = await AndroidIp.isHotspotEnabled ?? false; isWifi = await AndroidIp.isWifiEnabled ?? false; _wifiname = networkResult?.WifiName ?? ""; } on PlatformException { IpAddress_Wifi_tether = 'Failed to get '; IpAddress_Wifi = 'Failed to get '; IpAddress_Private = 'Failed to get '; IpAddress_USB_tether = 'Failed to get '; IpAddress_Cellular1 = 'Failed to get '; IpAddress_Cellular2 = 'Failed to get '; IpAddress_Blue_ther = 'Failed to get '; IpAddress_All = 'Failed to get '; IpAddress_Wifi_both = 'Failed to get '; } if (!mounted) return; setState(() { _IpAddress_Wifi_tether = IpAddress_Wifi_tether; _IpAddress_Wifi = IpAddress_Wifi; _IpAddress_Private = IpAddress_Private; _IpAddress_USB_tether = IpAddress_USB_tether; _IpAddress_Cellular1 = IpAddress_Cellular1; _IpAddress_Cellular2 = IpAddress_Cellular2; _IpAddress_Blue_ther = IpAddress_Blue_ther; _IpAddress_All = IpAddress_All; _IpAddress_Wifi_both = IpAddress_Wifi_both; _isHotspot = isHotspot; _isWifi = isWifi; _wifiname; }); }
-
构建UI
[@override](/user/override) Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text('插件示例应用'), ), body: ListView( children: [ Column( children: [ Text('连接变化: $_Connecton_change\n'), Row( children: [ Text('WiFi: $_IpAddress_Wifi\n'), SizedBox(width: 25), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi)), ], ), Row( children: [ Text('WiFi Tether: $_IpAddress_Wifi_tether\n'), SizedBox(width: 25), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi_tether)), ], ), Text('私有: $_IpAddress_Private\n'), Row( children: [ Text('WiFi Tether Both: $_IpAddress_Wifi_both\n'), SizedBox(width: 25), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Wifi_both)), ], ), Text('蜂窝网络2: $_IpAddress_Cellular2\n'), Row( children: [ Text('USB Tether: $_IpAddress_USB_tether\n'), SizedBox(width: 25), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_USB_tether)), ], ), Row( children: [ Text('蓝牙 Tether: $_IpAddress_Blue_ther\n'), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => _copy(_IpAddress_Blue_ther)), ], ), Text("热点: $_isHotspot"), Text("WiFi: $_isWifi"), Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('$_ondeviceconnected2'), RaisedButton(color: Colors.blue, child: Text("复制"), onPressed: () => setLisIp()), ], ), Text('设备: $_ondeviceconnected'), Text('WiFi名称: $_wifiname'), Text('所有: $_IpAddress_All\n'), RaisedButton( color: Colors.blue, child: Text("分享"), onPressed: () async { await AndroidIp.shareAPKFile; }, ), Text("状态: $_status"), RaisedButton( color: Colors.blue, child: Text("分享"), onPressed: () async { setShare(); }, ), RaisedButton( color: Colors.blue, child: Text("打开设置"), onPressed: () async { await AndroidIp.OpenSettings; }, ), RaisedButton( color: Colors.blue, child: Text("启用WiFi"), onPressed: () async { await AndroidIp.EnableWifi; }, ), RaisedButton( color: Colors.blue, child: Text("启用热点"), onPressed: () async { Hotspot hotspot = await AndroidIp.SetHotspotEnable; print("======>${hotspot.encode()}"); }, ), RaisedButton( color: Colors.blue, child: Text("启用权限 ${networkResult?.IsLocationEnabled} "), onPressed: () async { await AndroidIp.EnablePermission; }, ), RaisedButton( color: Colors.blue, child: Text("存储"), onPressed: () async { await AndroidIp.EnableStoragePermission; }, ), RaisedButton( color: Colors.blue, child: Text("对等"), onPressed: () async { await AndroidIp.getP2pNames; }, ), ], ), ], ), ), ); }
-
复制IP地址到剪贴板
_copy(String ipAddress_Wifi) { var clipboardData = ClipboardData(text: ipAddress_Wifi); Clipboard.setData(clipboardData); }
-
设置设备连接监听
setLisIp() { setState(() { _ondeviceconnected2 = ""; }); var da = androidIp.onDeviceConnected!.listen((event) { setState(() { _ondeviceconnected2 = _ondeviceconnected2 + "," + event; }); }); }
-
设置共享监听
setShare() { setState(() { _status = ""; }); var da = androidIp.onShared!.listen((event) { setState(() { _status = event; }); }); }
更多关于Flutter安卓工具类插件android_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安卓工具类插件android_util的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
android_util
是一个 Flutter 插件,用于在 Flutter 应用中访问 Android 平台特定的功能。它提供了一些工具类方法,帮助开发者在 Flutter 应用中调用 Android 的原生功能。
安装
首先,你需要在 pubspec.yaml
文件中添加 android_util
插件的依赖:
dependencies:
flutter:
sdk: flutter
android_util: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
使用
android_util
插件提供了一些常用的 Android 平台功能,例如获取设备信息、打开系统设置、检查权限等。
1. 获取设备信息
import 'package:android_util/android_util.dart';
void getDeviceInfo() async {
String deviceModel = await AndroidUtil.deviceModel;
String deviceManufacturer = await AndroidUtil.deviceManufacturer;
String androidVersion = await AndroidUtil.androidVersion;
print('Device Model: $deviceModel');
print('Device Manufacturer: $deviceManufacturer');
print('Android Version: $androidVersion');
}
2. 打开系统设置
import 'package:android_util/android_util.dart';
void openSettings() async {
await AndroidUtil.openSettings();
}
3. 检查权限
import 'package:android_util/android_util.dart';
void checkPermission() async {
bool hasPermission = await AndroidUtil.checkPermission("android.permission.CAMERA");
if (hasPermission) {
print("Camera permission granted");
} else {
print("Camera permission denied");
}
}
4. 请求权限
import 'package:android_util/android_util.dart';
void requestPermission() async {
bool granted = await AndroidUtil.requestPermission("android.permission.CAMERA");
if (granted) {
print("Camera permission granted");
} else {
print("Camera permission denied");
}
}
5. 获取电池信息
import 'package:android_util/android_util.dart';
void getBatteryInfo() async {
int batteryLevel = await AndroidUtil.batteryLevel;
bool isCharging = await AndroidUtil.isBatteryCharging;
print('Battery Level: $batteryLevel%');
print('Is Charging: $isCharging');
}
注意事项
-
权限声明:在 Android 中,某些功能可能需要权限。你需要在
AndroidManifest.xml
文件中声明这些权限。例如,如果要访问相机权限,需要添加:<uses-permission android:name="android.permission.CAMERA" />
-
权限请求:从 Android 6.0 (API 23) 开始,某些权限需要在运行时请求。你可以使用
requestPermission
方法来请求权限。 -
平台特定代码:
android_util
插件只适用于 Android 平台。在 iOS 或其他平台上调用这些方法可能会抛出异常。你可以使用Platform.isAndroid
来检查当前平台。import 'dart:io'; if (Platform.isAndroid) { // 调用 Android 特定的方法 }