从主要活动检查互联网状态

Posted

技术标签:

【中文标题】从主要活动检查互联网状态【英文标题】:Check internet status from the main activity 【发布时间】:2015-03-25 23:20:30 【问题描述】:

我是android开发的新学生,所以我没有足够的编码经验,所以我需要你的帮助...... 我在 android studio 上创建了一个 java 类来检查是否有互联网连接:

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;


public class InternetStatus 
private static final String LOG_TAG ="InternetStatus";
public static boolean hasActiveInternetConnection(Context context) 
    if (isNetworkAvailable((Activity) context)) 
        try 
            HttpURLConnection urlc = (HttpURLConnection) (new     URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500);
            urlc.connect();
            return (urlc.getResponseCode() == 200);
         catch (IOException e) 
            Log.e(LOG_TAG, "Error checking internet connection", e);
        
     else 
        Log.d(LOG_TAG, "No network available!");
    
    return false;

public static boolean isNetworkAvailable(Activity mActivity) 
    Context context = mActivity.getApplicationContext();
    ConnectivityManager connectivity = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) 
        return false;
     else 
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) 
            for (int i = 0; i < info.length; i++) 
                if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                    return true;
                
            
        
    
    return false;





所以,我有两个问题:

1- 这是正确的代码还是我遗漏了什么?

2- 如您所见,这是一个 java 类,如果我在我的主要活动上创建一个按钮来检查是否有互联网连接!我怎么能通过导入这个类或类似的东西来做到这一点?!!

【问题讨论】:

【参考方案1】:
// Check if there is any connectivity for a Wifi network
public boolean isConnectedWifi()
    NetworkInfo info = Connectivity.getNetworkInfo(Context);
    return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI;


// Check if there is any connectivity for a mobile network
public boolean isConnectedMobile()
    NetworkInfo info = Connectivity.getNetworkInfo(Context);
    return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE;


// Check all connectivities whether available or not
public boolean isNetworkAvailable() 
    ConnectivityManager cm = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnected();

如何使用?

例如,我们需要检查连接是否可用:

if(isNetworkAvailable())
    // do your thing here.

当网络可用时,我们需要检查是WiFi还是移动网络:

if(isConnectedWifi())
    // do your thing here with WiFi Network.


if(isConnectedMobile())
    // do your thing here with Mobile Network.

【讨论】:

谢谢兄弟 :) 这是最好的答案 (Y),它可以 100% 工作,但这里缺少“连接”类,你必须构建它,我用谷歌搜索它并在这里查看课程:(***.com/questions/2802472/…) 我想为你的答案投票,但我没有足够的声誉:( 感谢您提供有关失踪的信息。接受我的 +1。【参考方案2】:

首先,你必须在AndroidManifest.xml

中包含一个权限请求
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

然后,创建一个方法来检查互联网连接是否处于活动状态:

public static boolean isInternetConnected(Context context) 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    return activeNetwork != null && activeNetwork.isConnectedOrConnecting();

【讨论】:

我缺少权限请求。谢谢!【参考方案3】:

在你的MainActivity 班级中

@Override
protected void onCreate (Bundle savedInstanceState) 

super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_camera);
     boolean isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
    

如果你有按钮

boolean isavailable ;
@Override
protected void onCreate (Bundle savedInstanceState) 

super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_camera);
     Button someButton = (Button) findViewById(R.id.yourButton);
     someButton.setOnClickListener(new onClickLIstener()
               isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
     );
    

【讨论】:

【参考方案4】:

要检查连接状态,无需连接到互联网并获取状态代码。使用下面的代码。

public boolean isConnected() 
    ConnectivityManager manager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo info = manager.getActiveNetworkInfo();
    if (info != null && info.isConnected()) 
        return true;
     else 
        return false;

    

根据活动网络状态返回真或假。

在您的按钮单击时只需调用此函数,如果它返回 true,则存在连接。如果返回 false,则表示没有活动的 Internet 连接。

【讨论】:

【参考方案5】:

只需将 info.isConnected() 放入您的 isNetworkAvailable 函数中:

  public static boolean isNetworkAvailable(Activity mActivity) 
            ...
        if (connectivity == null) 
            return false;
         else 
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null && info.isConnected()) 
                    ...
                    
                
            
            return false;
        

【讨论】:

【参考方案6】:

大部分答案都已过时

    fun isNetworkAvailable(context : Context): Boolean 
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (isAndroidVersionAboveLollipop()) 
            val activeNetwork = connectivityManager.activeNetwork ?: return false
            val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
            networkCapabilities.let 
                return it.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && it.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
            
         else 
              return connectivityManager.activeNetworkInfo?.isConnectedOrConnecting ?: false
         
    

    fun isAndroidVersionAboveLollipop() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M

【讨论】:

以上是关于从主要活动检查互联网状态的主要内容,如果未能解决你的问题,请参考以下文章

检查活动的互联网连接 Android

在整个应用程序中检查 android studio 中的互联网连接。 (我们是不是需要在每个 java 活动中编写连接管理器函数?) [重复]

vivo 悟空活动中台-基于行为预设的动态布局方案

vivo 悟空活动中台-基于行为预设的动态布局方案

vivo 悟空活动中台-基于行为预设的动态布局方案

vivo 悟空活动中台-基于行为预设的动态布局方案