2015-05-20 6 views
2

Мой сервер постоянно проверяет, включено ли приложение для Android. Могу ли я спросить, каковы способы, которыми я могу заниматься в своем приложении для Android.Как проверить, установлено ли устройство Android Android

+0

Что вы подразумеваете под онлайн? Например, если он подключен к сети или нет? –

+0

Возможный дубликат: http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts –

+0

У нас есть сервер, и я хочу проверить, действительно ли мое приложение для Android running/online –

ответ

12

Создайте вспомогательный метод, называемый isNetworkAvailable(), который вернет true или false в зависимости от доступности сети или нет. Это будет выглядеть как этот

private boolean isNetworkAvailable() { 
    ConnectivityManager manager = 
      (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 
    boolean isAvailable = false; 
    if (networkInfo != null && networkInfo.isConnected()) { 
     // Network is present and connected 
     isAvailable = true; 
    } 
    return isAvailable; 
} 

Не забудьте добавить следующее разрешение на файл манифеста

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

Edit: Вышеуказанный метод только проверяет, является ли сеть доступна. Он не проверяет, действительно ли устройство может подключиться к Интернету. Лучший способ проверить, если есть подключение к Интернету присутствует, чтобы попытаться подключиться к некоторому известному серверу с помощью HTTP

public static boolean checkActiveInternetConnection() { 
if (isNetworkAvailable()) { 
    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: ", e); 
    } 
} else { 
    Log.d(LOG_TAG, "No network present"); 
} 
return false; 
} 

Кстати, старайтесь не запускать выше метод на вашем основном потоке или это даст ваш NetworkOnMainThreadException. Используйте AsyncTask или что-то подобное.

+0

Кажется, что этот метод проверяет только сетевое подключение, но не интернет-соединение. Например, у вас может быть Wi-Fi без подключения к Интернету. –

+0

Да, это только проверка сетевого подключения –

+0

Я отредактировал свой ответ. Посмотрите, работает ли это для вас. –

0
public boolean isOnline() { 
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connManager.getActiveNetworkInfo(); 

    if(networkInfo != null && networkInfo.isConnectedOrConnecting()){ 
    return true; 
    } 
    else{ 
     return false 
    } 
} 
Смежные вопросы