如何在android应用程序启动时检查互联网是否可用?

如何在android应用程序启动时检查互联网是否可用?,android,connectivity,Android,Connectivity,我的应用程序首先从internet加载数据(我正在使用webservice) 我想在应用程序启动时检查互联网接入 我想检查一下是否有任何形式的互联网,无论是3G、WIFI、GPRS还是其他任何形式 如果不可用,请向用户发送消息,如“您需要访问互联网”,然后退出应用程序。(如果没有互联网接入,当前我的应用程序中出现强制关闭错误) 如果可用,请正常启动我的应用程序 另外,我的应用程序是在不同的阶段从webservice获取数据,在每个阶段或操作之前,我想首先检查互联网访问 我该怎么做 您可以使用Co

我的应用程序首先从internet加载数据(我正在使用webservice) 我想在应用程序启动时检查互联网接入

  • 我想检查一下是否有任何形式的互联网,无论是3G、WIFI、GPRS还是其他任何形式
  • 如果不可用,请向用户发送消息,如“您需要访问互联网”,然后退出应用程序。(如果没有互联网接入,当前我的应用程序中出现强制关闭错误)
  • 如果可用,请正常启动我的应用程序
  • 另外,我的应用程序是在不同的阶段从webservice获取数据,在每个阶段或操作之前,我想首先检查互联网访问

  • 我该怎么做

    您可以使用
    ConnectivityManager
    完成所有这些操作。此处提供了所有必需的信息

    您可能希望在初始活动的
    onStart()
    方法中粘贴类似的内容(取决于在代码中启动连接和下载数据的位置)

    我还没有测试te代码,所以剪切和粘贴可能是个坏主意,但这应该给您一个好的起点。如果你查看文档,还有很多其他信息

    另外,通过更改代码来处理缺乏连接的问题可能是一个好主意,这样当没有连接时它就不会崩溃,pre-haps会显示默认的加载屏幕吗?此外,即使有可用的连接,您的应用程序也可能无法获取数据,因此您也需要处理这种情况。

    您可以使用我的方法:

    public static boolean isNetworkAvailable(Context context) 
    {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        if (connectivity != null) 
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
    
            if (info != null) 
            {
                for (int i = 0; i < info.length; i++) 
                {
                    Log.i("Class", info[i].getState().toString());
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    
    公共静态布尔值isNetworkAvailable(上下文)
    {
    ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
    if(连接性!=null)
    {
    NetworkInfo[]info=connectivity.getAllNetworkInfo();
    如果(信息!=null)
    {
    对于(int i=0;i
    请参见前面的答案。如果我的wifi连接没有工作的internet连接,则代码返回true。你有其他选择吗?@MoHaNKRaJ嗨…很抱歉迟了回复。。以上代码适用于所有类型的网络连接。因此,如果连接了Wifi,则显然会返回true。如果只想检查移动数据连接的条件,则不要使用
    getAllNetworkInfo()
    方法。请使用
    getNetworkInfo(ConnectivityManager.TYPE\u mobile)
    ,这样将只检查移动数据connection@dreamcoder这还不足以检查信息=空则网络已连接?@dreamcoder事实上,我只面对WiFi的问题,WiFi路由器没有互联网连接(只需打开WiFi路由器而不需要任何连接),但我们可以从手机连接到WiFi,对吗?这里我应该得到错误的值,因为我们无法访问互联网。但我已经连接到WiFi,上面提到的方法返回真值,因此,当从手机访问在线内容时,我遇到了例外情况。
    public static boolean isNetworkAvailable(Context context) 
    {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        if (connectivity != null) 
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
    
            if (info != null) 
            {
                for (int i = 0; i < info.length; i++) 
                {
                    Log.i("Class", info[i].getState().toString());
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    
    NetworkInfo i = conMgr.getActiveNetworkInfo();
      if (i == null)
        return false;
      if (!i.isConnected())
        return false;
      if (!i.isAvailable())
        return false;
      return true;