当前位置: 首页 > 知识库问答 >
问题:

运行时检查互联网连接

欧阳何平
2023-03-14

你好,我有一个应用程序,有两个活动:主页面和详细页面。

当有互联网连接时,用户可以从主页面导航到详细信息页面。当没有网络连接时,他不能这样做。

问题是:当我进入详细信息页面并关闭wifi时,我想完成此活动,我如何实现此功能?我在主要活动类中检查过类似这样的内容:

 private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

当我启动有互联网或没有互联网的应用程序时,它都可以正常工作,但是当我在运行时关闭wifi时,它不起作用。

无论如何,谢谢你!

共有3个答案

楚嘉纳
2023-03-14

试试看:

  • 创建一个检查internet状态或连接的助手方法
  • 创建线程或可运行的
  • 在Thread或Runnable的run()中,调用helper方法
  • 在MainActivity的onCreate()中,启动线程或Runnable以每n秒/分钟运行一次
蒲昊
2023-03-14

您可能希望实现一个广播接收器,监听连接终止事件,以便您可以立即采取行动并完成详细活动。此链接可能会有所帮助。

胡沈义
2023-03-14

您必须监视连接中的更改

每当连接详细信息发生更改时,连接管理器都会广播CONNECTIVITY_ACTION(“android.net.conn.CONNECTIVITY_CHANGE”)操作。您可以在清单中注册广播接收器以侦听这些更改并相应地恢复(或挂起)后台更新。

每当互联网状态发生变化时,您的广播接收器将被调用,如果互联网断开连接,您可以相应地处理它。

public class InternetReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {     

    if (isConnected()) 
        Log.d("NetReceiver", "Internet is connected");  
    else
        Log.d("NetReceiver", "Internet is not connected");    
   }   
};

此方法检查来自所有互联网源的连接,包括3g

public boolean isConnected() {

Runtime runtime = Runtime.getRuntime();
try {

    Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
    int exitValue = ipProcess.waitFor();
    return (exitValue == 0);

  } catch (IOException e)          { Log.e("ERROR", "IOException",e); } 
    catch (InterruptedException e) { Log.e("ERROR", "InterruptedException",e); }

return false;
}

在清单文件中添加以下内容:

<receiver android:name=".InternetReceiver">
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>

这是来源

 类似资料:
  • 问题内容: 当我尝试在iPhone上检查互联网连接时,出现了很多错误。谁能帮我解决这个问题? 代码: 代码错误: 如果无法读取,则错误1表示: “ Int”不可转换为“ SCNetworkReachabilityFlags” 错误2和3: 找不到接受提供的参数的’init’的重载 问题答案: 为了解决注释中提到的4G问题,我已使用@AshleyMills可达性实现作为参考并重写了Swift 3.1

  • 大家好,我有一个简单的问题,如何在后台连续运行android中的一些代码块, 情况是检查互联网是否连接,相应地,它会将文件上传到服务器上。(这将在后台连续运行。) 我得到了类似BroadcastReceiver的东西,但我认为这只是为了检查互联网连接。 如果有人给块代码,让我明白,会有很大帮助... 谢谢

  • 我需要检查的设备是否有互联网连接,我搜索一些例子,但当我复制和粘贴的代码,我总是得到错误或不推荐的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要检查viewModel中的internet连接来发出一些请求,而我找到的所有方法都在参数中有上下文,而我无法在viewModel中获得上下文。 我尝试了这段代码,但我不明白我必须把它放在哪里,我得到 有人能给我解释一下怎么开这张支票吗?

  • 我试着从这个答案(被接受的答案)。我可以使用“PING”方法,但用户界面变黑了,因为它说它会阻止用户界面线程。它看起来不太好,令人不安,所以我尝试使用第二种方法“连接到互联网上的套接字”,但我不知道如何使用Kotlin中的类。 这是android studio将Java转换为kotlin的结果 但是我不知道如何使用它。我试过这样做: 它不起作用,导致了一个错误。它说我必须通过“消费者”。 我的问题

  • 问题内容: 这就是我在香草javascript中检查互联网连接的方式: 我的项目中有角度控制器和模块。我应该在上面的代码放在哪里?它应在全局上下文中执行,而不应分配给某个控制器。也许有某种全局控制器? 问题答案: 首先,我建议您听在线/离线活动。 您可以在AnguarJS中以这种方式进行操作: 注意:我在方法中包装了根范围变量的更改,以通知Angular某些更改。 之后,您可以: 在控制器中: 在

  • 问题内容: 是否有Apple框架捆绑包来检测是否存在互联网连接?当前,当我的应用程序尝试在没有互联网连接的情况下对用户的位置进行地理位置定位时会崩溃。 我对Swift和ios编程有些陌生-抱歉。 问题答案: 这不是一个完善的网络检查库,但是我发现了这种简单的方法来检查网络可用性。我设法将其翻译为Swift,并在这里完成了最终代码。 它适用于3G和WiFi连接。我还通过一个工作示例将其上传到了我的G