问题
I want to create a broadcast receiver as an inner class in my main activity. But I have problems defining the broadcast receiver in manifest xml file, because android can't find it.
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>
I tried with:
- .org.danizmax.myapp.MyActivity$Receiver
- org.danizmax.myapp.MyActivity$Receiver
- .MyActivity$Receiver
- .Receiver
I saw others also having similar problems, but did not find any answers.
So is it possible? If not, what's better way to use broadcast receivers?
Thanks!
回答1:
Yes, it is possible.
The receiver android:name attribute should look like .path.to.class.MyClass$MyInnerClass
回答2:
If you want to this with a non-static inner class, you can't do it via the AndroidManifest.xml. You can however dynamically register the BroadcastReceiver: Receiver as inner class in Android
回答3:
The better way to use BroadcastReceiver
s would be to make it its own class. That way the code is better organized and you can possible reuse it.
来源:https://stackoverflow.com/questions/4391974/is-it-possible-to-define-a-broadcast-receiver-as-an-inner-class-in-manifest-file