Receiver как внутренний класс в Android

В моем коде есть внутренний класс, который расширяет BroadcastReceiver .

И я добавил следующую строку в AndroidManifest.xml :

<receiver android:name="OuterClass$InnerClass android:enabled="true"/>

Но я получаю следующую ошибку:

не удалось создать экземпляр получателя org.example.test.OuterClass $ InnerClass

Как я могу решить эту проблему?

19
задан Kunal P.Bharati 30 September 2016 в 06:53
поделиться

2 ответа

Нотация $ обозначает не внутренний класс, а статический вложенный класс. Таким образом, теоретически есть 2 способа решить эту конкретную проблему:

  1. Обозначить его как настоящий внутренний класс, т.е. OuterClass.InnerClass (хотя не уверен, что Android съест это с момента создания экземпляра внутреннего класса довольно сложнее, чем просто сделать Class#newInstance().

  2. Вместо этого объявите класс статическим вложенным классом, т.е. добавьте static к классу InnerClass {} . Таким образом, OuterClass$InnerClass должен иметь возможность создать из него новый экземпляр.

Если это не решает проблему, то, видимо, Android просто не ест это Тогда я бы просто извлек его в отдельный класс

См. также:

17
ответ дан 30 November 2019 в 02:14
поделиться

Может быть, не хватает только точки и закрывающей кавычки? Например

<receiver android:name=".OuterClass$InnerClass" android:enabled="true"/>
7
ответ дан 30 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: