如何识别蜂窝或移动网络信号强度

时间:2020-06-15 19:27:05

标签: flutter dart

我创建了一个简单的代码,如下图所示显示网络状态:

enter image description here

与以下代码有关:

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:android_device_info/android_device_info.dart'; 

import '../widgets/row_item.dart';

class NetworkTab extends StatefulWidget {
  @override
  _NetworkTabState createState() => _NetworkTabState();
}

class _NetworkTabState extends State<NetworkTab> {
  var data = {};

  @override
  void initState() {
    super.initState();

    getData();
  }

  getData() async {
    var data = {};

    final memory = await AndroidDeviceInfo().getNetworkInfo();
    final display = await AndroidDeviceInfo().getNfcInfo();
    var sim = await AndroidDeviceInfo().getSimInfo();

    data.addAll(memory);
    data.addAll(display);
    data.addAll(sim);

    if (mounted) {
      setState(() {
        this.data = data;
      });
    }

    var permission =
        await PermissionHandler().checkPermissionStatus(PermissionGroup.phone);
    if (permission == PermissionStatus.denied) {
      var permissions =
          await PermissionHandler().requestPermissions([PermissionGroup.phone]);
      if (permissions[PermissionGroup.phone] == PermissionStatus.granted) {
        sim = await AndroidDeviceInfo().getSimInfo();
        data.addAll(sim);
        if (mounted) {
          setState(() {
            this.data = data;
          });
        }
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    if (data.isEmpty) {
      return Center(child: CircularProgressIndicator());
    }

    return SingleChildScrollView(
      child: Column(
        children: <Widget>[
          Divider(),
          RowItem('Network Available', '${data['isNetworkAvailable']}'),
          RowItem('Network', '${data['networkType']}'),
          RowItem('iPv4 Address', '${data['iPv4Address']}'),
          RowItem('iPv6 Address', '${data['iPv6Address']}'),
          RowItem('WiFi Enabled', '${data['isWifiEnabled']}'),
          RowItem('WiFi SSID', '${data['wifiSSID']}'),
          RowItem('WiFi BSSID', '${data['wifiBSSID']}'),
          RowItem('WiFi Speed', '${data['wifiLinkSpeed']}'),
          RowItem('Signal strength(Cellular)', '???'),
          RowItem('WiFi MAC', '${data['wifiMAC']}'),
          Divider(),
          RowItem('NFC Present', '${data['isNfcPresent']}'),
          RowItem('NFC Enabled', '${data['isNfcEnabled']}'),
          Divider(),
          RowItem('IMSI', '${data['imsi']}'),
          RowItem('Serial', '${data['serial']}'),
          RowItem('Country', '${data['country']}'),
          RowItem('Carrier', '${data['carrier']}'),
          RowItem('SIM Locked', '${data['isSimNetworkLocked']}'),
         RowItem('activeMultiSimInfo', '${data['activeMultiSimInfo']}'),
          RowItem('Multi SIM', '${data['isMultiSim']}'),
          RowItem('Active SIM(s)', '${data['numberOfActiveSim']}'),
          Divider(),
        ],
      ),
    );
  }
}

所以现在我有两种类型的网络:

  • Wifi
  • 蜂窝(2G / 3G / 4G)

因此,如果网络类型为Cellular,我现在需要计算下图所示的信号强度:

enter image description here

有没有显示信号强度值的插件,或者我可以使用连通性插件来计算它....

如果我使用连通性插件,如何通过该插件计算Signal strength的值。

我希望这足够清楚。

1 个答案:

答案 0 :(得分:0)

使用internet_speed_test插件。我使用相同的互联网速度。通过使用以下代码,我已经在“文本”小部件上显示了信号强度

final internetSpeedTest = InternetSpeedTest();
    
internetSpeedTest.startDownloadTesting(
              onDone: (double transferRate, SpeedUnit unit) {
                // TODO: Change UI
              },
              onProgress: (double percent, double transferRate, SpeedUnit unit) {
                // TODO: Change UI
    
                setState(() {
                  if (unit == SpeedUnit.Kbps) {
                    speed = transferRate.toStringAsPrecision(3) + ' Kbps';
                  }
                  if (unit == SpeedUnit.Mbps) {
                    speed = transferRate.toStringAsPrecision(3) + ' Mbps';
                  }
                });
              },
              onError: (String errorMessage, String speedTestError) {
                // TODO: Show toast error
              },
              //  testServer: fetchLatestAppVersionCodeUri.toString(),
              //Your test server URL goes here,
            );