如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报

Posted

技术标签:

【中文标题】如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报【英文标题】:How to verify if user has network access and show a pop-up alert when there isn't如何验证用户是否具有网络访问权限并在没有网络访问权限时显示弹出警报 【发布时间】:2019-02-16 03:34:02 【问题描述】:

我的名字是 Pablo,我目前正在构建一个 Flutter 应用程序。因此,我的应用程序从 Firebase 存储中获取了一些图像和音频,显然,在没有互联网连接的情况下,应用程序不会显示图像并且不会播放音频。 我希望应用程序在没有 WIFI 或数据时向用户弹出警报;我该怎么做?

谢谢:)

【问题讨论】:

【参考方案1】:

为了显示警报部分,您可以使用 RFlutter Alert 库。它是 Flutter 易于定制且易于使用的警报/弹出对话框库。

示例代码:

Alert(context: context, title: "RFLUTTER", desc: "Flutter is awesome.").show();

*我是 RFlutter Alert 的开发者之一。

【讨论】:

【参考方案2】:

您可以使用连接包https://pub.dartlang.org/packages/connectivity 这是一个简单的教程,附有飞镖文件https://medium.com/@aseemwangoo/internet-connectivity-in-flutter-a6b6aedf2964

可能重复 - Check whether there is an Internet connection available on Flutter app

【讨论】:

感谢您的回答!!【参考方案3】:

您可以简单地使用一个函数来检查您是否有网络连接,通过 ping Google 服务器:

/system/bin/ping -c 1 8.8.8.8

android 中,此函数如下所示:

public boolean isNetworkAvailable() 
    Runtime runtime = Runtime.getRuntime();
    try 
        Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int exitValue = process.waitFor();
        return (exitValue == 0);
     catch (IOException | InterruptedException e) 
        e.printStackTrace();
    
    return false;

在 Firestore 中,默认情况下会启用离线持久性。因此,您可以检查用户是从缓存中读取数据还是从 Firebase 服务器读取数据。更优雅的方法是使用 isFromCache() 函数。这是Android的代码:

yourDocRef.addSnapshotListener(new DocumentListenOptions().includeMetadataChanges(), new EventListener<DocumentSnapshot>() 
    @Override
    public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) 
        Log.d("listener.isFromCache: " + documentSnapshot.getMetadata().isFromCache());
    
);

【讨论】:

非常感谢! @Alex Mamo:我刚刚用isNetworkAvailable() 复制并粘贴了你的第一个方法,但我总是得到一个错误的结果,尽管我有互联网连接。知道为什么会这样吗? @VanessaF 很可能是因为您没有访问 Goole 服务器。如果您从命令提示符执行 ping,您会得到相同的行为吗? 我在 Windows 中使用了 5 次“ping 8.8.8.8”。发送了 2 次 4/4 包裹。 2 次 1/4。一次3/4。但是使用你在 Java 中建议的方法,我总是得到一个错误(我尝试了 30 多次) 我用你建议的方法又试了50次,同时使用windows ping。虽然在windwons ping中,我总是至少得到4个包中的1个来ping 8.8.8.8或ping www.google.com,但你的方法总是错误的。方法本身被执行(我知道这一点是因为我使用 E/LogTag 检查)。知道问题可能是什么吗?我还检查了 Android 手稿,在那里我允许 INTERNET 连接。

以上是关于如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报的主要内容,如果未能解决你的问题,请参考以下文章

华为防火墙的管理方式(ConsoleTelnetWebSSH)

计算机网络里面Password验证和AAA验证区别是啥?

文件共享后没有访问权限是怎么回事?

无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是不是有访问权限。

\\***无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是不是有访问权限。

如何验证网络文件夹访问