Неоднократно на просторах интернета встречал примеры по теме проверки доступности интернета на устройстве. В них обычно создавали подключение к какому-нибудь сайту и ловили исключения. Если всё прошло без исключения, значит интернет доступен.
По моему мнению, это неверно. Можно использовать стандартные методы из SDK. Конкретнее, класс ConnectivityManager. Он как раз и предназначен для получения информации об активных подключениях.
Для использования класса необходимо добавить разрешение android.permission.ACCESS_NETWORK_STATE в манифест.
Данный класс можно использовать, например, так (проверка доступности мобильного интернета):
Для проверки доступности конкретного хоста можно использовать следующий код:
Ну а если совсем всё упростить, то можно воспользоваться примерно таким методом:
По моему мнению, это неверно. Можно использовать стандартные методы из SDK. Конкретнее, класс ConnectivityManager. Он как раз и предназначен для получения информации об активных подключениях.
Для использования класса необходимо добавить разрешение android.permission.ACCESS_NETWORK_STATE в манифест.
Данный класс можно использовать, например, так (проверка доступности мобильного интернета):
String cs = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)
getSystemService(cs);
cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
* This source code was highlighted with Source Code Highlighter.
или так (проверка доступности WiFi): String cs = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)
getSystemService(cs);
cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
* This source code was highlighted with Source Code Highlighter.
и проверить состояние DetailedState возвращаемого объекта NetworkInfo.Для проверки доступности конкретного хоста можно использовать следующий код:
String cs = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)
getSystemService(cs);
cm.requestRouteToHost(TYPE_WIFI, int hostAddress);
* This source code was highlighted with Source Code Highlighter.
где hostAddress - IP адрес хоста.Ну а если совсем всё упростить, то можно воспользоваться примерно таким методом:
public boolean isOnline() {
String cs = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)
getSystemService(cs);
if (cm.getActiveNetworkInfo() == null) {
return false;
}
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
* This source code was highlighted with Source Code Highlighter.
А не подскажете, как программно включить (отключить) точку доступа wifi (portable hotspot)?
ОтветитьУдалитьИначе приходится делать много действий: меню-настройки-беспроводные сети-режим модема-точка доступа
Вас интересует реализация такой программы? Попробую посмотреть, если что-то найду – напишу.
УдалитьСобственно, нашёл ответ: http://stackoverflow.com/a/3388910/436938
УдалитьОткрытого API в данный момент нет, только через reflection это можно сделать. Это не гарантирует работу на всех устройствах, да и вообще не гарантирует работоспособность.
Если порыться в исходниках WifiManager'а, то можно найти все нужные методы: getWifiApState(), getWifiApConfiguration(), setWifiApEnabled()
Есть и более полный ответ с примером реализации: http://stackoverflow.com/a/7049074/436938
Удалить