This question already has an answer here:
- Receiver as inner class in Android 6 answers
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!
Yes, it is possible.
The receiver android:name attribute should look like
.path.to.class.MyClass$MyInnerClass
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.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