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

代码解释

  1. 导入库

    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';
    
  2. 初始化

    void main() {
      runApp(MyApp());
    }
    
  3. 定义状态变量

    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 = '';
    
  4. 初始化插件

    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();
    }
    
  5. 处理权限更改

    permissionchanged() {
      var da = androidIp.onPermissionChanged!.listen((event) {
        print("${event.name}${event.status}");
        initPlatformState();
      });
    }
    
  6. 初始化平台状态

    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;
      });
    }
    
  7. 构建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;
                    },
                  ),
                ],
              ),
            ],
          ),
        ),
      );
    }
    
  8. 复制IP地址到剪贴板

    _copy(String ipAddress_Wifi) {
      var clipboardData = ClipboardData(text: ipAddress_Wifi);
    
      Clipboard.setData(clipboardData);
    }
    
  9. 设置设备连接监听

    setLisIp() {
      setState(() {
        _ondeviceconnected2 = "";
      });
    
      var da = androidIp.onDeviceConnected!.listen((event) {
        setState(() {
          _ondeviceconnected2 = _ondeviceconnected2 + "," + event;
        });
      });
    }
    
  10. 设置共享监听

    setShare() {
      setState(() {
        _status = "";
      });
    
      var da = androidIp.onShared!.listen((event) {
        setState(() {
          _status = event;
        });
      });
    }
    

更多关于Flutter安卓工具类插件android_util的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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');
}

注意事项

  1. 权限声明:在 Android 中,某些功能可能需要权限。你需要在 AndroidManifest.xml 文件中声明这些权限。例如,如果要访问相机权限,需要添加:

    <uses-permission android:name="android.permission.CAMERA" />
    
  2. 权限请求:从 Android 6.0 (API 23) 开始,某些权限需要在运行时请求。你可以使用 requestPermission 方法来请求权限。

  3. 平台特定代码android_util 插件只适用于 Android 平台。在 iOS 或其他平台上调用这些方法可能会抛出异常。你可以使用 Platform.isAndroid 来检查当前平台。

    import 'dart:io';
    
    if (Platform.isAndroid) {
      // 调用 Android 特定的方法
    }
回到顶部