2015-01-06 4 views
1

У меня есть приложение, у которого есть предварительное уведомление, запущенное службой. Услуга вызывает каждую секунду класс, который служит для подключения к GPS. Класс GPS использует NETWORK_PROVIDER и GPS_PROVIDER.Предотвращение сбоя приложения при недоступности сети

Все исправлено до сих пор, за исключением сегодняшнего дня, пока что-то не произошло.

В какой-то момент в системе Android появилось сообщение о том, что «если вы не подключаетесь к Wi-Fi-сети или мобильной сети, вы не сможете получить доступ к электронной почте и интернету». Я плохо помню сообщение, но у меня было две кнопки: «Отмена» и «Хорошо». Возможно, я нажал на что-то, вытащив телефон из кармана.

Наверху этого сообщения было еще одно сообщение о том, что мое приложение, к сожалению, разбилось. Итак, порядок событий выглядит следующим образом: отключена сеть (?), Приложение разбилось.

Я думаю, что мне нужно каким-то образом обработать сетевую ошибку, но сейчас я не знаю, потому что я не мог получить много информации об ошибке.

Любые мысли?

Благодаря

+0

проверьте сеть, прежде чем продолжить – Elltz

+0

@sufiyan благодарит за ответ. У меня не было времени проверить код, но я не забыл, не волнуйся. Я все еще обеспокоен тем, где использовать код, который вы предложили, поскольку я использую прослушиватель событий местоположения. –

+0

Этот ответ имеет похожий код на тот, который я использую: http://stackoverflow.com/a/10917500/702196 Я не знаю, могу ли я разместить код там где угодно. –

ответ

2

Вы можете использовать ConnectivityManager для доступа к системе услуг, а затем NetworkInfo класс, чтобы получить статус соединения вашей сети,

метод, чтобы проверить, если сеть доступна,

private boolean isNetworkAvailable() { 
     ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = manager.getActiveNetworkInfo(); 

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

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

// Check if Internet is connected 
    if (isNetworkAvailable()) { 
        // Execution here 
     } 

    else { 
     // Error message here if network is unavailable. 
     Toast.makeText(this, "Network is unavailable!", Toast.LENGTH_LONG).show(); 
    } 

не забудьте дать разрешение на приложение, чтобы получить доступ состояния сети,

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

Update:

«GPS имеет сеть состояние слушателя, и я думаю, что должен но я не могу это проверить ».

Вы можете проверить состояние сети от LocationManager этот путь,

// Declaring a Location Manager 
protected LocationManager mLocationManager; 
boolean isNetworkEnabled = false; 
boolean isGPSEnabled = false; 

// Getting network status 
isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

Если вы хотите, чтобы получить статус GPS,

// Getting GPS status 
isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
+0

Могу ли я смоделировать доступность сети, используя «Режим полета»? –

+0

да, конечно, вы можете. –

+0

Проблема возникает ** после ** инициируется прослушиватель событий. Это происходит так: GPS начинает проверять местоположение устройства и отлично работает. После некоторого момента сеть выходит из строя - нет мобильной сети, нет GPS, нет wi-fi. –

0

вы можете справиться с IOException & UnknownHostException

try 
{ 

------------code------------ 

} 
catch(IOException e) 
{ 
e.printStackTrace(); 
} 
catch(UnknownHostException e) 
{ 
e.printStackTrace(); 
} 
Смежные вопросы