【问题标题】: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 或数据时向用户弹出警报;我该怎么做?

谢谢:)

【问题讨论】:

    标签: android firebase flutter firebase-storage


    【解决方案1】:

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

    示例代码:

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

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 感谢您的回答!!
      【解决方案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 连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多