Android для обнаружения возможности отсутствия подключения для передачи данных

У меня есть приложение, которое должно связываться с сервером через некоторый случайный интервал через GPRS или EDGE .. Но есть несколько возможностей, при которых приложение не может получить доступ к Интернету, когда пользователь звонит или деактивирован и т. Д. В настоящее время у меня есть два сценария: восстанавливаемый и невозвратный.

Восстанавливаемые сценарии

  • При телефонном звонке (пользователь повесит трубку, и соединение для передачи данных снова станет активным)
  • Нет сигнала (иногда сигнал может пропадать, и телефон снова получает сигнал)

Невосстановимые сценарии

  • Режим полета
  • Деактивация соединения для передачи данных

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

РЕДАКТИРОВАТЬ: я могу определить режим полета с помощью одного из намерений. Я не мог найти для других.


person Jeyanth Kumar    schedule 19.04.2012    source источник


Ответы (2)


Приведенный ниже код возвращается, если доступны действительные соединения.

public boolean isConnectionsAvailable() {
         boolean lRet = false;
         try{
             ConnectivityManager conMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
             NetworkInfo info= conMgr.getActiveNetworkInfo();  
             if(info != null && info.isConnected()) {  
                 lRet = true ;
             }else{  
                 lRet = false ;
                }
         }catch (Exception e) {
             Log.d("Connection Error", e.toString());
             lRet = false ;
        }
         return lRet;
       }

После этого, если у вас низкий уровень сигнала, вы делаете запрос HTTP, задав для него соответствующий тайм-аут. Если истекло время ожидания, дайте пользователю соответствующее сообщение, как показано ниже.

public void serverCall(String pURL){

   if (isConnectionsAvailable()){
     // Call server by setting proper timeout

   }

}

Изменить:

Чтобы проверить статус режима полета:

private static boolean isAirplaneModeOn(Context context) {

   return Settings.System.getInt(context.getContentResolver(),
           Settings.System.AIRPLANE_MODE_ON, 0) != 0;

}
person Vinayak Bevinakatti    schedule 19.04.2012
comment
я могу проверить, доступно ли соединение для передачи данных или нет .. мне нужно знать причину отсутствия соединения, чтобы это приложение и подождать и попытаться или предупредить пользователя ... - person Jeyanth Kumar; 20.04.2012
comment
Убедитесь, что я отредактировал свой ответ, я указал одну из причин отсутствия подключения, которая проверяет статус режима полета. Существуют и другие методы проверки различных причин отсутствия подключения. - person Vinayak Bevinakatti; 20.04.2012
comment
спасибо чувак .. но я использую намерение, чтобы проверить статус режима полета. который я могу использовать для немедленного оповещения пользователя, когда пользователь включает режим полета .. я только для таких сценариев, как низкий уровень сигнала, деактивация соединения для передачи данных и т. д. - person Jeyanth Kumar; 20.04.2012

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

Handler mHandler = new Handler();
Runnable yourMethodRunnable = new Runnable(){
    @Override
    public void run(){
        yourMethod();
    }
};

private void yourMethod(){
    try{
        // talk to server
    } catch (InCallException e) {
        mHandler.postDelayed(yourMethodRunnable, delay)
    } catch (NoSignalException e) {
        // etc...
    } catch (OtherException e) {
        // etc...
    }
}

Исключения - это просто примеры и, вероятно, не существуют, получите исключения, которые вы хотите перехватить, либо из Документов разработчика Android, либо просматривая выходные данные LogCat, когда вы воспроизводите каждый раз, когда соединение с сервером будет потерпеть поражение.

person TerryProbert    schedule 19.04.2012