I am a little bit confused about the ComponentName class in Android.
There are different ways to get to a component name object, but I don’t know when to use which… and why!
Example:
- Application package is
de.zordid.sampleapp - but widget provider class is
de.zordid.sampleapp.widget.WidgetProvider
Using
ComponentName cn = new ComponentName("de.zordid.sampleapp.widget",
"WidgetProvider");
I got this component info: ComponentInfo{de.zordid.sampleapp.widget/WidgetProvider}, but I could not use this – the component is unknown!
But the JavaDoc says I should give the package and the class within that package – and that is what I did, didn’t I??
Using
ComponentName cn = new ComponentName(context, WidgetProvider.class);
yields ComponentInfo{de.zordid.sampleapp/de.zordid.sampleapp.widget.WidgetProvider} – and that works fine!!
There is even another way to get a ComponentName – by context and a string.
Which one should be used where and when??
Thanks!
The
ComponentNameconstructor taking twoStrings can be used to refer to a component in another application. But, the first argument is not the package name of the class; it is the package name of the application—thepackageattribute of themanifestelement in that application’sAndroidManifest.xml. So your first example should beThat constructor could certainly be used to refer to components in your own application, but since you already have hold of a
Contextfrom your own application you might as well use it and use one of the other constructors. In my opinion, the one taking aClassshould be preferred whenever usable. You could use the one taking aStringif you only know the class dynamically for some reason; in that case, it should take the fully-qualified class name as above.