Intereting Posts
Google Play – Полностью затененный apk Android WifiLock WIFI_MODE_SCAN_ONLY не работает Как вы можете справиться с увольнением DialogFragment (совместимость lib) после завершения AsyncTask Получать обновленный счет строк из SQLite в Android с использованием необработанного запроса? Как сделать linearlayout в scrollview для заполнения всей области Как создать случайный UUID в Android, когда происходит событие нажатия кнопки? Проблемы с созданием PocketSphinx для Android с помощью NDK Почему мобильные браузеры загружают мою страницу полностью увеличен? Android PayPalActivity не полноэкранный Как перенести изображение с его URL на SD-карту? Как отменить AlertDialog.Builder Переключение страниц в ViewPager не является гладким Не удается разрешить символ @ integer / google_play_services_version для intellij Как настроить высоту панели действий программно Может ли мой сервер получать подтверждение от GCM, как только сообщение отправлено в приложение Android?

Сервис и BroadCastReceiver

Я видел несколько примеров того, как реализовать BroadCastReceiver, но как я должен реализовать Сервис, который должен реагировать на некоторые ожидающие намерения (например, входящий телефонный звонок) … На самом деле мне было интересно узнать о той же «проблеме», но в Деятельность. У вас, очевидно, есть класс, который расширяет Сервис или Активность), поэтому он не может также расширить BroadCastReceiver … Похоже, мы не можем создавать сервисы, поддерживающие платформу, и / или Activties?

Solutions Collecting From Web of "Сервис и BroadCastReceiver"

Чтобы зарегистрировать действие для получения определенного намерения, вам необходимо:

// Flag if receiver is registered private boolean mReceiversRegistered = false; // I think this is the broadcast you need for something like an incoming call private String INCOMING_CALL_ACTION = "android.intent.action.PHONE_STATE"; // Define a handler and a broadcast receiver private final Handler mHandler = new Handler(); private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Handle reciever String mAction = intent.getAction(); if(mAction.equals(INCOMING_CALL_ACTION) { // Do your thing } } @Override protected void onResume() { super.onResume(); // Register Sync Recievers IntentFilter intentToReceiveFilter = new IntentFilter(); intentToReceiveFilter.addAction(INCOMING_CALL_ACTION); this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler); mReceiversRegistered = true; } @Override public void onPause() { super.onPause(); // Make sure you unregister your receivers when you pause your activity if(mReceiversRegistered) { unregisterReceiver(mIntentReceiver); mReceiversRegistered = false; } } 

Затем вам также нужно будет добавить фильтр намерений в ваш манифест:

  <activity android:name=".MyActivity" android:label="@string/name" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </activity> 

Вы можете создать внутренний класс

 class A extends Activity { BroadcastReceiver r = new BroadcastReceiver(){ // code to handle broadcase } } 

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

Фактически вы можете реагировать на входящий телефонный звонок, просто добавив слушателя в TelephonyManager

Вы определяете PhoneStateListener в своем сервисе / активности

 private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK: break; case TelephonyManager.CALL_STATE_RINGING: break; case TelephonyManager.CALL_STATE_IDLE: break; } } }; 

Затем в методе onCreate:

 mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

Окончательно вы очищаете слушателя в onDestroy:

 mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); 

В этом случае гораздо проще.