在运行时检查互联网连接

Vad*_* L. 5 android

美好的一天,我有一个应用程序有2个活动:主页和详细信息页面.

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

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

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

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

无论如何,谢谢!

Sha*_*dge 6

您必须监视连接的变化

android.net.conn.CONNECTIVITY_CHANGE只要连接详细信息发生更改,ConnectivityManager就会广播CONNECTIVITY_ACTION(" ")操作.您可以在清单中注册广播接收器以收听这些更改并相应地恢复(或暂停)您的后台更新.

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

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");    
   }   
};
Run Code Online (Sandbox Code Playgroud)

此方法检查来自所有Internet源的连接,包括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;
}
Run Code Online (Sandbox Code Playgroud)

在您的清单文件中添加:

<receiver android:name=".InternetReceiver">
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

这是