Прослушивание входящих SMS после того, как трансляция не зарегистрирована: хорошая функция или ошибка вещателя? - PullRequest
1 голос
/ 01 декабря 2011

У меня есть приложение, которое должно просматривать входящие SMS (сканировать текст SMS и показывать тостовые сообщения на основе содержимого), даже после того, как мое приложение закрыто.Желаемая функциональность - приложение отслеживает все входящие SMS, пока приложение не переместится с устройства, и теперь оно работает следующим образом.Но я думаю, если мне понадобится в ближайшее время, чтобы «переключить» этот «наблюдательный глаз», как я могу это сделать?

public class SmsReceiver extends BroadcastReceiver 
{
  @Override
  public void onReceive(Context context, Intent intent) 
  {
       //---get the SMS message passed in---
        Bundle bundle = intent.getExtras();        
        SmsMessage[] msgs = null;

        if (bundle != null)
        {
          //do some action
        }
  }

Код BroadcastReceiver - это отдельная единица SMSReceiver.java.Из основной активности я не вызываю этого получателя, не регистрируюсь и не отменяю регистрацию.Это просто работает независимо.Удивительно.Итак ... как я могу остановить этот приемник ??

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Самый распространенный способ регистрации / отмены регистрации BroadcastReceivers - это использование onResume() и onPause() методов вашего Activity.

. Сначала удалите <intent-filter> из вашего манифеста, т.е.удалите этот раздел ......

<intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECIEVED"></action>
</intent-filter>

Затем добавьте что-то подобное в ваш Activity ....

public class MyActivity extends Activity {

    private final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private SMSReceiver smsReceiver = null;
    private Boolean isReceiverRegistered = false;

    @Override
    protected void onResume() {
        if (!isReceiverRegistered) {
            registerReceiver(smsReceiver, new IntentFilter(ACTION_SMS_RECEIVED));
            isReceiverRegistered = true;
        }
    }

    @Override
    protected void onPause() {
        if (isReceiverRegistered) {
            unregisterReceiver(smsReceiver);
            isReceiverRegistered = false;
        }
    }
}
1 голос
/ 01 декабря 2011

Вам придется взять BroadcastReceiver из своего манифеста, чтобы управлять им, например, использовать его в Service или Activity.Когда он в Манифесте, он всегда включен.

...