2010-12-08 6 views
35

Ich möchte einen Rundfunkempfänger als eine innere Klasse in meiner Haupttätigkeit erstellen. Aber ich habe Probleme beim Definieren des Broadcast-Empfängers in der Manifest-XML-Datei , weil Android es nicht finden kann.Ist es möglich, einen Broadcast-Empfänger als innere Klasse in der Manifest-Datei zu definieren?

Code:

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> 

Ich habe versucht, mit:

  • .org.danizmax.myapp.MyActivity $ Receiver
  • org.danizmax.myapp .MyActivity $ Empfänger
  • .MyActivity $ Receiver
  • .Receiver

sah ich auch andere ähnliche Probleme haben, aber konnten keine Antworten.

So ist es möglich? Wenn nicht, was ist besser, Rundfunkempfänger zu verwenden?

Danke!

+3

Versuchen Sie, Ihre innere Klasse statisch zu machen. Welches Paketattribut definieren Sie auch in Ihrem Manifest? Das bestimmt den Startpunkt deines Android: Name auf dem Empfänger. –

+0

Ah funktioniert es jetzt mit statischen Klasse und Empfänger Name definiert als .MyActivity $ Receiver. Fügen Sie Ihren Kommentar über das Machen der inneren Klasse Static zu Ihrer ersten Antwort hinzu, damit ich Ihnen etwas Ansehen schicken kann. Vielen Dank! – danizmax

+0

Entschuldigung, ich habe Ihren Kommentar nicht gesehen. Sie werden nur über Kommentare zu Fragen benachrichtigt, wenn es sich um Ihre Frage handelt, oder wenn Sie einen @username am Anfang des Kommentars verwenden. –

Antwort

65

Ja, es ist möglich.

Der Empfänger android: name Attribut wie .path.to.class.MyClass$MyInnerClass

+75

Innere Klasse muss statisch sein ... – danizmax

+0

Boom. Vielen Dank dafür :-) – Bear

+0

@danizmax du bist ein Genie! –

-2

Der bessere Weg, BroadcastReceiver s zu verwenden, wäre, es zu einer eigenen Klasse zu machen. Auf diese Weise ist der Code besser organisiert und Sie können ihn möglicherweise wiederverwenden.

+2

Nicht, wenn Sie [eine Methode in Ihrer Haupttätigkeit] aufrufen müssen (http://stackoverflow.com/questions/15058743/how-do-i -register-in-manifest-an-inner-media-button-broadcastreciver # comment21174031_15058783). Und nicht in [Gelee-Bohne] (http://stackoverflow.com/a/13576130/636571) ... – an00b

12

aussehen sollte Wenn Sie mit einer nicht-statischen inneren Klasse dazu mögen, können Sie es über die AndroidManifest.xml nicht. Sie können den BroadcastReceiver jedoch dynamisch registrieren: Receiver as inner class in Android

+1

Große Referenz, aber dies funktioniert nicht für Media-Tasten in [Jelly Bean] (http:// Stackoverflow.com/a/13576130). – an00b

+0

Sie müssen die Klasse statisch und öffentlich für android machen, um den Broadcast-Empfänger zu instanziieren, wenn er statisch in der Manifest-Datei deklariert ist. Wenn Android instanziiert, muss es eine statische Klasse sein, andernfalls muss auch das Objekt der äußeren Klasse instanziiert werden. – user2779311

Verwandte Themen