2013-05-06 2 views
4

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

Благодаря

+0

Почему проверка соединения в сервисе? Почему бы не выполнить каждый запрос http/https? –

+0

Спасибо за комментарий @Pankaj Kumar; на самом деле это онлайн-потоковая передача, поэтому нужно постоянно проверять соединение каждую секунду. – Amila

ответ

6

Теперь я покажу, как создать SMS-приемник в услуге:

public class MyService extends Service { 

@Override 
public void onCreate() { 
    BwlLog.begin(TAG); 
    super.onCreate(); 

    SMSreceiver mSmsReceiver = new SMSreceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); 
    filter.addAction(SMS_RECEIVE_ACTION); // SMS 
    filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS 
    this.registerReceiver(mSmsReceiver, filter); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    return START_STICKY; 
} 

    /** 
* This class used to monitor SMS 
*/ 
class SMSreceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) { 
      //handle sms receive 
     } 
    } 
} 
+0

Попробуем использовать эту структуру .. Большое спасибо – Amila

+0

Было действительно полезно Спасибо –

+2

Нужно ли также объявлять мой приемник в файле манифеста? – AlexSanchez

1

Вам не нужно использовать Service или BroadCastReceiver для этой цели. Просто проверьте состояние соединения каждый раз, когда вам нужно выполнить ping-сервер.

Вы можете написать метод, который проверяет это и возвращает boolean (true/false) в соответствии с состоянием соединения. Ниже метод делает то же самое.

public static boolean isNetworkAvailable(Context mContext) { 

     try { 
      final ConnectivityManager conn_manager = (ConnectivityManager) mContext 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 
      final NetworkInfo network_info = conn_manager 
        .getActiveNetworkInfo(); 

      if (network_info != null && network_info.isConnected()) { 
       if (network_info.getType() == ConnectivityManager.TYPE_WIFI) 
        return true; 
       else if (network_info.getType() == ConnectivityManager.TYPE_MOBILE) 
        return true; 
      } 

     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     return false; 

    } 
+0

Спасибо за комментарий @AndroidEnthusiast; в моем коде мне всегда нужно использовать интернет-соединение, на самом деле это потоковое онлайн, поэтому нужно следить за соединением каждую секунду. – Amila

2

Было бы нецелесообразно проверять возможность подключения каждую секунду. В качестве альтернативы вы можете прослушать действие (ConnectivityManager.CONNECTIVITY_ACTION) и определить, подключены ли вы к активной сети или нет.

IntentFilter filter = new IntentFilter(); 
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 

Кроме того, вы можете проверить тип сети, которая в настоящее время активен (Type_WIFI, Type_MOBILE)

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

+0

Подумайте, это поможет. Это будет более полезно, если вы можете передать мне пример кода. Спасибо – Amila

+0

будет отсылать это, спасибо большое – Amila

2

Я надеюсь, что это link будет полезно. Просто пройдите через это.

+1

Спасибо, я посмотрю – Amila

Смежные вопросы