Можно ли определить получателя вещания как внутренний класс в файле манифеста?

Я хочу создать приемник вещания как внутренний класс в моей основной деятельности. Но у меня проблемы с определением приемника вещания в XML-файле манифеста, потому что Android не может его найти.

Код:

public class MyActivity extends Activity{
    ...

    public class Receiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            ....
        }

    }

    ...
}

Manifest:

<receiver android:name=".org.danizmax.myapp.MyActivity$Receiver" android:enabled="true">
            <intent-filter>
                <action android:name="org.danizmax.myapp.BROADCAST_INITIAL_DATA"></action>
            </intent-filter>
</receiver>

Я пробовал с:

  • .org.danizmax.myapp.MyActivity $ Receiver
  • org.danizmax.myapp.MyActivity $ Receiver
  • .MyActivity $ Receiver
  • .Получатель

Я видел, что у других тоже были похожие проблемы, но не нашел ответов.

Так возможно ли это? Если нет, то как лучше использовать широковещательные приемники?

Спасибо!

3 ответа

Решение

Да, это возможно.

Атрибут приемника android:name должен выглядеть так .path.to.class.MyClass$MyInnerClass

Если вы хотите сделать это с нестатическим внутренним классом, вы не можете сделать это через AndroidManifest.xml. Однако вы можете динамически зарегистрировать BroadcastReceiver: Receiver как внутренний класс в Android

Лучший способ использовать BroadcastReceiverбыло бы сделать его своим собственным классом. Таким образом, код лучше организован, и вы можете использовать его повторно.

Другие вопросы по тегам