Я хочу проверять подключение к Интернету во время работы моего приложения для Android. Я пытался использовать сервисы, но кажется, что это не лучший вариант. Есть ли какой-нибудь способ реализовать широковещательный приемник в службе? Или я должен отказаться от услуги и использовать только вещательные приемники?
Реализовать широковещательный приемник внутри службы
comment
Почему связь проверяется в Сервисе? Почему не при каждом запросе http/https?
- person Pankaj Kumar   schedule 06.05.2013
comment
Спасибо за комментарий @Pankj Kumar; на самом деле это онлайн-трансляция, поэтому нужно проверять соединение каждую секунду
- person Amila   schedule 06.05.2013
Ответы (3)
Я покажу вам, как создать 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
}
}
}
person
buptcoder
schedule
06.05.2013
Попробую использовать эту структуру .. Большое спасибо
- person Amila; 06.05.2013
Было действительно полезно Спасибо
- person Aman Singhal; 01.12.2013
Нужно ли мне также объявлять мой приемник в файле манифеста?
- person AXSM; 29.08.2014
@AlexSanchez вам не нужно объявлять это в файле mainifest
- person buptcoder; 01.09.2014
Хорошо, я знаю, что очень поздно спрашивать здесь, но что, если мне нужно отправить результат из onReceive обратно в службу? Я изо всех сил пытался решить эту проблему, но не повезло!
- person Lamar; 29.11.2018
У меня есть активность, которая отправляет SMS. Должен ли я использовать
sendBroadcast()
или startService()
для вызова класса обслуживания, который также включает широковещательный приемник, как вы упомянули в своем коде?
- person ; 11.05.2021
Было бы неразумно проверять подключение каждую секунду. В качестве альтернативы вы можете прослушать действие (ConnectivityManager.CONNECTIVITY_ACTION) и определить, подключены ли вы к активной сети или нет.
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
Кроме того, вы можете проверить тип сети, который в данный момент активен (Type_WIFI, Type_MOBILE).
Таким образом, вам не нужен сервис, который проверяет подключение каждую секунду.
person
Siddharth N
schedule
06.05.2013
Думаю, это поможет. Было бы полезнее, если бы вы могли сослаться на какой-нибудь пример кода. Спасибо
- person Amila; 06.05.2013
будет ссылаться на это, большое спасибо
- person Amila; 06.05.2013
Вам не нужно использовать Service
или BroadCastReceiver
для этой цели. Просто проверяйте статус подключения каждый раз, когда вам нужно пропинговать сервер.
вы можете написать метод, который проверяет это и возвращает 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;
}
person
AAnkit
schedule
06.05.2013
Спасибо за комментарий @AndroidEnthusiast; в моем коде я всегда должен использовать подключение к Интернету, на самом деле это онлайн-трансляция, поэтому нужно проверять подключение каждую секунду
- person Amila; 06.05.2013