如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]

Posted

技术标签:

【中文标题】如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]【英文标题】:how to check if internet is available not if mobile or wifi is turned on in android [duplicate]如果在android中打开了移动设备或wifi,如何检查互联网是否可用[重复] 【发布时间】:2014-02-14 13:40:27 【问题描述】:

我有两个活动

第一个名为:MainActivity

第二个名为:MountLebanonActivity

在第二个活动中,我使用此代码从网站检索文本

private TextView txtdata;
final String textSource = "http://orthodoxprayers.yolasite.com/resources/saint_elie_sinelfil.txt";
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy); 
    setContentView(R.layout.activity_mount_lebanon);
    txtdata = (TextView)findViewById(R.id.txtdata);
    new MyTask().execute();
    URL textUrl;

       try 
        textUrl = new URL(textSource);

        BufferedReader bufferReader 
         = new BufferedReader(new InputStreamReader(textUrl.openStream()));

        String StringBuffer;
        String stringText = "";
        while ((StringBuffer = bufferReader.readLine()) != null) 
         stringText += StringBuffer;   
        
        bufferReader.close();

        txtdata.setText(stringText);
        catch (MalformedURLException e) 
        e.printStackTrace();
        txtdata.setText(e.toString());   
        catch (IOException e) 
        e.printStackTrace();
        txtdata.setText(e.toString());   
       

   

   private class MyTask extends AsyncTask<Void, Void, Void>

    String textResult;

    @Override
    protected Void doInBackground(Void... params) 

        URL textUrl;

        try 
         textUrl = new URL(textSource);

         BufferedReader bufferReader 
          = new BufferedReader(new InputStreamReader(textUrl.openStream()));

         String StringBuffer;
         String stringText = "";
         while ((StringBuffer = bufferReader.readLine()) != null) 
          stringText += StringBuffer;   
         
         bufferReader.close();

         textResult = stringText;
         catch (MalformedURLException e) 
         e.printStackTrace();
         textResult = e.toString();   
         catch (IOException e) 
         e.printStackTrace();
         textResult = e.toString();   
        

     return null;

    

    @Override
    protected void onPostExecute(Void result) 

     txtdata.setText(html.fromHtml(textResult));
     super.onPostExecute(result);   
    

       

在第一个活动中,我将此代码放在按钮的 onclick 事件中

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    android.net.NetworkInfo wifi = cm
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    android.net.NetworkInfo datac = cm
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if ((wifi != null & datac != null)
            && (wifi.isConnected() | datac.isConnected()
            && (wifi.isAvailable() | datac.isAvailable()))) 
            //connection is available
        Intent intent_main_time = new Intent(MainActivity.this,
                MountLebanonActivity.class);
        startActivity(intent_main_time);
        finish();
             else
            //no connection
              Toast toast = Toast.makeText(getBaseContext(), "No Internet",
            Toast.LENGTH_LONG);
    toast.show();  
            

如果打开或关闭 wifi 或移动设备,此代码可以正常工作

但是如果我的 wifi 已打开并且没有互联网连接,则此代码不起作用,因为我没有得到 toast,但第二个活动打开时出现错误代码 java.net.connectesception: failed to connect .. . 80 端口连接失败 econnrefused(连接被拒绝)

有什么帮助吗?

【问题讨论】:

“互联网可用”是什么意思?你的意思是你可以访问每一个曾经连接过的主机吗?或者也许只是您连接到当前连接的每个主机?更有可能的是,您的意思是您可以访问一小组主机。 ping 他们。 我的意思是我的 wifi 已打开但没有互联网连接 此代码检查 wifi 或移动设备是否已打开但我还需要检查是否有互联网连接 使用此代码,您将永远无法访问 else: (wifi.isConnected() | datac.isConnected() if 将在 wifi.isConnected() 工作时启动。 只是检查你是否可以连接到你的url,它没有返回连接错误 在启动 Activity 之前尝试连接。 【参考方案1】:

你是对的。您提供的代码仅检查是否有网络连接。检查是否存在活动 Internet 连接的最佳方法是尝试通过 http 连接到已知服务器。

public static boolean hasActiveInternetConnection(Context context) 
if (isNetworkAvailable(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;

【讨论】:

我应该把这段代码放在哪里 在你的广播接收器类中 请这样尝试。 twigstechtips.blogspot.in/2013/07/…

以上是关于如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

空闲状态下的 WiFi 直接发现

如何用android手机当wifi热点

如何用adb连接android手机

移动设备的地理位置

Android 应用程序,打开与移动设备的连接

android 连不上不上真机魅族