2013-04-25 3 views
2

Я искал и обыскал и пробовал все, что я могу думать о 5 раз. Я не могу заставить свой вещательный приемник зарегистрироваться.Трансляционный приемник с внутренним классом не зарегистрирован

В настоящее время, в манифесте, в элементе приложения, у меня есть:

<receiver android:name=".MainActivity$browserReceiver" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="com.mycompany.snapbench.browsertest" /> 
    </intent-filter> 
</receiver> 

В моем классе MainActivity:

public static BrowserReceiver browserReceiver; 

MainActivity-> OnCreate:

browserReceiver = new BrowserReceiver(); 

И наконец, в конце класса MainActivity:

public class BrowserReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.e("Receiver", "I'm pretty sick of this."); 
    } 
} 

При нажатии на кнопку в приложении, я запускаю это, как тест:

if (isIntentAvailable(this, "com.mycompany.snapbench.browsertest")) { 
    Log.e("Intent", "It is there."); 
} else { 
    Log.e("Intent", "FAIL"); 
} 

И, конечно же, я всегда получаю «FAIL» в LogCat. Что я делаю не так?

+0

Возможно, вам понадобится убедиться, что вы вызываете super.onReceive() сначала в своем BroadcastReceiver – Tom

ответ

4

Только что протестировали два подхода и оба отлично работали. Для обоих я реализовал аа класс SmsReceiver в деятельности под названием ContactManager:

public static class SmsReceiver extends BroadcastReceiver { 

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

    @Override 
    public void onReceive(final Context context, final Intent intent) {  
     if (intent != null && SMS_RECEIVED.equals(intent.getAction())) { 
      Log.d("TAG", "SMS received in inner class"); 
     } 
    } 
} 
  1. первый я зарегистрировал приемник в onCreate() метода:

    IntentFilter filter = new IntentFilter(SmsReceiver.SMS_RECEIVED); 
    BroadcastReceiver receiver = new SmsReceiver(); 
    registerReceiver(receiver, filter); 
    

    На самом деле было бы лучше сделать зарегистрировать его в onResume() и отмените регистрацию в onPause().

  2. во-вторых, я удалил свой регистрационный код и добавил приемник к манифесту:

Оба решения работали очень хорошо, и напечатанный текст SMS принятый во внутреннем классе , Насколько я вижу, вы не объявили свой внутренний класс static. Это может быть ошибка. Поэтому просто измените его на:

public static class BrowserReceiver extends BroadcastReceiver { 
    ... 
} 

Надеюсь, это поможет ... Приветствия!

+0

Кажется, что моя проблема заключается в методе isIntentAvailable(). Не уверен, почему он возвращает ложь, но это другой вопрос. Спасибо за вашу помощь. – rainrunner

0

вызов registerReceiver в onCreate из ваших MainActivity

registerReceiver(browserReceiver, new IntentFilter("com.mycompany.snapbench.browsertest")); 

забудьте unregisterReceiver(browserReceiver) в onDestroy.

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