检查Android互联网连接的完美功能,包括蓝牙平台

时间:2015-01-21 04:13:16

标签: android android-bluetooth

我的应用程序在wifi和移动网络中运行良好,但无法检测何时通过蓝牙网络共享连接。

public boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();

    if (networkInfo != null && networkInfo.isConnected()) {
        return true;
    }
    return false;
}

我尝试过运行其他一些应用程序。他们也没有显示网络连接,但谷歌应用程序工作得很好,所以像其他一些应用程序,如whatsap。想知道他们是如何做到的,以及为什么大多数应用程序都忽略了这一点。

任何人都可以告诉我通过各种方式检查Android中的互联网连接,包括蓝牙平移和代理等。

任何帮助将不胜感激。提前谢谢..

7 个答案:

答案 0 :(得分:7)

尝试连接“始终可用”网站。如果存在任何连接,则应返回true:

protected static boolean hasInternetAccess()
{
    try
    {
        URL url = new URL("http://www.google.com");

        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setRequestProperty("User-Agent", "Android Application:1");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1000 * 30);
        urlc.connect();

        // http://www.w3.org/Protocols/HTTP/HTRESP.html
        if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
        {
            // Requested site is available
            return true;
        }
    }
    catch (Exception ex)
    {
        // Error while trying to connect
        return false;
    }
    return false;
}

答案 1 :(得分:4)

可能有用,getAllNetworkInfo()提供网络信息列表

 public boolean checkNetworkStatus(Context context) 
            {
                boolean flag = false;
                ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo[] netInfo = cm.getAllNetworkInfo();

               //it provide all type of connectivity ifo
                for (NetworkInfo ni : netInfo)
                {
                    if (ni.getTypeName().equalsIgnoreCase("Connecxtion Type"))
                        if (ni.isConnected())
                            flag = true;
                }
                return flag;
            }

答案 2 :(得分:3)

检测手机(或任何其他设备)是否与互联网连接的最简单方法是将ping发送到我眼中的网络服务器。当然你需要一个永远可以访问的ip地址。你可以尝试这个代码(从我的头脑中),也许你必须抓住一些例外:

public boolean hasInternetConection() {
    Runtime runtime = Runtime.getRuntime();
    Process ping = runtime.exec("/system/bin/ping -c 1 173.194.39.4"); // google.com

    int result = ping.waitFor();

    if(result == 0) return true;
    else return false;
}

当然,每次wifi状态,蓝牙状态或其他一些改变时都必须运行此方法(我建议在单独的线程中)但总而言之它应该适用于您的问题。

答案 3 :(得分:3)

您可以使用以下内容:

public boolean isMyNetworkIsLive() {
    boolean isConnectionActive = false;
    ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
    if (nNetworkInfo != null && nNetworkInfo.isConnectedOrConnecting()) {
        isConnectionActive = true;
    }
    return isConnectionActive;
}

来自Test Internet Connection Android

的参考号

答案 4 :(得分:3)

您的互联网连接检查似乎没问题。关于蓝牙连接,试试这个:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
    // Bluetooth enabled
}  

你的完美功能将是:

public boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    return networkInfo != null && networkInfo.isConnected()
           bluetoothAdapter != null && bluetoothAdapter.isEnabled() 
}

我认为你需要这些权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

答案 5 :(得分:1)

我同意Muzikant并感谢他的想法。我认为发布已实施的解决方案会更好,因为它需要一些补充。

这就是我解决它的方法。

Created和AsyncTask以避免主线程异常上的网络。

public class GetInternetStatus extends AsyncTask<Void,Void,Boolean> {

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

    return hasInternetAccess();
}

protected  boolean hasInternetAccess()
{

    try
    {
        URL url = new URL("http://www.google.com");

        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setRequestProperty("User-Agent", "Android Application:1");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1000 * 30);
        urlc.connect();

        // http://www.w3.org/Protocols/HTTP/HTRESP.html
        if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
        {
            // Requested site is available
            return true;
        }
    }
    catch (Exception ex)
    {
        // Error while trying to connect
        ex.printStackTrace();
        return false;
    }
    return false;
}

}

现在将以下函数添加到activity并调用它来检查连接性。

    // Checking for all possible internet connections
    public static boolean isConnectingToInternet() {
        Boolean result = false;
        try {
            //get the result after executing AsyncTask
            result = new GetInternetStatus().execute().get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return result;
    }

答案 6 :(得分:0)

检查互联网连接 - 移动数据,蓝牙,Wifi

  /**
 * To check internet connection
 *
 * @param context context for activity
 * @return boolean true if internet is connected else false
 */
public static boolean isInternetConnected(Context context) {
    ConnectivityManager connec = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    android.net.NetworkInfo wifi = connec
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    android.net.NetworkInfo mobile = connec
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    android.net.NetworkInfo bluetooth = connec
            .getNetworkInfo(ConnectivityManager.TYPE_BLUETOOTH);

    if (wifi.isConnected()) {
        return true;
    } else if (mobile.isConnected()) {
        return true;
    } else if(bluetooth.isConnected()){
        return true;
    } else if (!mobile.isConnected()) {
        return false;
    }
    return false;
}