dart如何实现udp组播,见另一篇:https://blog.csdn.net/qq_41074373/article/details/107463892

在项目开发时,在本地可以成功广播,用抓包工具也可以抓到数据包。但是当打包成apk后,在真机上广播,抓包工具没有抓到数据包。

引用:https://www.zhihu.com/question/49923081

后续查询资料知道,要保证app具有联网gps定位的权限。

(1)Android 6.0以上调用getScanResults()获取WiFi列表,必须要打开GPS才能获取,否则为空。

是因为6.0之前,APP在不开启GPS定位的情况下,依然可以调用getScanResults获取周边Wifi的相关信息,比如SSID、BSSID、level等,去请求谷歌位置服务器(“http://www.google.com/loc/json”),获取用户所在的位置信息;

这显得GPS定位开关毫无意义,显然不合理,是位置权限设计的Bug;

Google出于设计考虑,6.0之后版本,获取WiFi列表必须要设备开启了GPS定位,并且APP具备位置权限,才能获取WiFi列表。

(2) 安卓源码专门判断了是否开启了GPS定位:

 

在AndroidManifast.xml中增加:

    <!--  获取运营商信息  -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--用于访问wif网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--  这个权限用于获取wif的获取权限,wifi信息会用来进行网络定位  -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
    <!--  请求网络  -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--  后台唤醒定位需要的权限  -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!--  需要运行时注册的权限  -->
    <!--  用于进行网络定位  -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!--  用于访问GPS定位  -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--  用于提高GPS定位速度  -->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

ps:可在pubspec.yaml中添加以下两个包,检测是否拥有上述权限。

dependencies:
    connectivity: ^0.4.2
    permission_handler: ^3.2.0

检查是否连接wifi:

Future<Null> initConnectivity() async {
    String connectionStatus;
    try {
      connectionStatus = (await _connectivity.checkConnectivity()).toString();
    } on PlatformException catch (e) {
      print(e.toString());
      connectionStatus = '连接失败.';
    }
    if (!mounted) {
      return;
    }
    setState(() {
      _connectionStatus = connectionStatus;
    });
  }

检查是否拥有gps定位权限:

Future<bool> requestPermission() async {
    final permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
    print('permissions~~~:$permissions');

    if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
      isHasPermission = '有定位权限';
      print('有定位权限');
      return true;
    } else {
      isHasPermission = '无定位权限';
      print('无定位权限');
      return false;
    }
  }

 

 

本文地址:https://blog.csdn.net/qq_41074373/article/details/107486893