2014-12-15 10 views
1

У меня есть метод JavascriptInterface, который регистрирует LocalBroadcastManager, слушая полученные SMS. Когда приходит SMS, метод onReceive не вызывается.Android - LocalBroadcastManager для перехвата SMS не срабатывает

public void UIregisterSMSSource(String number) { 
    LocalBroadcastManager.getInstance(this) 
     .registerReceiver(mMessageReceiver, new IntentFilter(ACTION_SMS_RECEIVE)); 
} 

/** 
* SMS Receiver 
*/ 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(ACTION_SMS_RECEIVE)) { 
      StringBuilder buf = new StringBuilder(); 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       Bundle extras = intent.getExtras(); 
       Object[] pdus = (Object[]) extras.get("pdus"); 
       for (int i = 0; i < pdus.length; i++) { 
        SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        String sender = SMessage.getOriginatingAddress(); 
        String body = SMessage.getMessageBody().toString(); 
        Log.d(TAG, "[SMS] onReceive by " + sender + ". Content - " + body); 
        // Save preferences of the activation code 

       } 
      } 
     } 
    } 
}; 

Это ACTION_SMS_RECEIVE переменная:

private static final String ACTION_SMS_RECEIVE = "android.provider.Telephony.SMS_RECEIVED"; 

Я испытал это раньше, как BroadcastaReceiver и она работала. Я тоже удалил получателя из манифеста, который я не знаю, правильно ли это.

Нужно ли мне настроить что-то еще? На примерах, с которыми я столкнулся, больше не требуется настройка.

Заранее спасибо.

+1

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

+0

@BogdanV. есть MainActivity, который содержит всю вышеприведенную логику. Контекст, заданный LocalBroadcastManager, - это действие. Возможно, я написал это неправильно, когда заявил, что раньше использовал автономную трансляцию. Я имел в виду простой приемник на отдельном классе. – axierjhtjz

ответ

1

Приемник mMessageReceiver может только слушать намерение, которое отправлено через LocalBroadcastManager.sendBroadcast(intent).

Здесь, цель с android.provider.Telephony.SMS_RECEIVED действием, поднимается системой (не используя LocalBroadcastManager.sendBroadcast(intent)), поэтому ваше приложение не слушает это намерение.

Ваш предыдущий подход был верным, и вы можете продолжить эту логику.


Вы можете прочитать подробную example of LocalBroadcastManager, чтобы очистить ваши сомнения по поводу своего рабочего потока.

+0

Вы, где правильно. Хороший ответ, кстати. – axierjhtjz

+0

@axierjhtjz Спасибо :) и congs вы получили решение. –

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