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

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

код:

public class MyActivity extends Activity{
    ...

    public class Receiver extends BroadcastReceiver{

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

    }

    ...
}

манифеста:

<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
  • .Receiver

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

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

Спасибо!

Ответ 1

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

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

Ответ 2

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

Ответ 3

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